gpt4 book ai didi

g++编译错误: undefined reference to a shared library function which exists

转载 作者:行者123 更新时间:2023-12-03 21:11:32 25 4
gpt4 key购买 nike

我最近安装了高清5 ubuntu 机器上的库,现在无法链接到导出的函数。我写了一个简单的测试脚本读取HDF.cpp 解释这个问题:

#include <hdf5.h>

int main(int argc, char * argv[])
{
hid_t h5_file_id = H5Fopen(argv[1], H5F_ACC_RDWR, H5P_DEFAULT);
return 0;
}

编译命令是
g++ -Wl,-rpath,$HOME/hdf5/lib -I$HOME/hdf5/include \
-L$HOME/hdf5/lib -l:$HOME/hdf5/lib/libhdf5.so readHDF.cpp

返回以下错误
/tmp/cc6DXdxV.o: In function `main':  
readHDF.cpp:(.text+0x1f): undefined reference to `H5check_version'
readHDF.cpp:(.text+0x3c): undefined reference to `H5Fopen'
collect2: ld returned 1 exit status

我很困惑,因为 纳米 命令似乎说该功能已被导出:
nm -C $HOME/hdf5/lib/libhdf5.so | grep H5check_version

返回
0000000000034349 T H5check_version

H5Fopen 的类似结果.对可能出了什么问题有任何想法吗?不确定它是否有帮助,但如果我注释掉 H5Fopen脚本的一部分,然后它编译得很好:
#include <hdf5.h>

int main(int argc, char * argv[])
{
hid_t h5_file_id;// = H5Fopen(argv[1], H5F_ACC_RDWR, H5P_DEFAULT);
return 0;
}

此外,服务器上还安装了多个版本的 hdf5,供各种 python 模块使用,例如 h5py 和表,但我无法让它们中的任何一个工作,所以我在本地目录中安装了这个版本并更改了 rpath 选项对于 g++ 链接器。

最佳答案

好的,解决了。问题在于 -lhdf5 在编译命令中的位置。显然 -lhdf5 应该放在 readHDF.cpp 之后。例如 g++ -Wl,-rpath=$HOME/hdf5/lib -L$HOME/hdf5/lib -I$HOME/hdf5/include readHDF.cpp -lhdf5 将毫无问题地编译,但 g++ -Wl,-rpath=$HOME/hdf5/lib -L$HOME/hdf5/lib -I$HOME/hdf5/include -lhdf5 readHDF.cpp 将因 undefined reference 错误而失败。有趣的是,这只是 Ubuntu 12.04 的问题,因为两个编译命令都适用于 Ubuntu 10.04。

在这篇文章中找到了带有解释的答案:

undefined reference to symbol even when nm indicates that this symbol is present

我想在脚本之后放置 -lXXX 是更安全的做法。

关于g++编译错误: undefined reference to a shared library function which exists,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14905239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com