g++在与自定义共享库链接时未定义对的引用



我正在尝试将我的C++程序与自定义共享库链接起来。共享库是用C编写的,但是,我认为这并不重要。我的图书馆叫libfoo.so。其完整路径为/home/xyz/customlib/libfoo.so。我还在LD_LIBRARY_PATH中添加了/home/xyz/customlib,所以ld应该能够找到它。当我运行nm -D libfoo.so时,我得到:

...
00000000000053a1 T myfunc
000000000000505f T foo
0000000000004ca9 T bar
00000000000051c6 T baz
000000000000527f T myfunc2
...

所以我认为我的图书馆是正确编译的。我正试图通过运行将其链接到我的c++文件test.cpp

g++ -L/home/xyz/customlib -Og -g3 -ggdb -fsanitize=address test.cpp -o test -lfoo

然而,我得到了以下错误:

/usr/bin/ld: in function sharedlib_test1()
/home/xyz/test.cpp:11: undefined reference to `myfunc()'
/usr/bin/ld: in function sharedlib_test2()
/home/xyz/test.cpp:33: undefined reference to `foo()'
...

我做错了什么?我该如何解决此问题?请注意,我已经重命名了文件和共享库,因为我无法共享确切的文件和函数名。

正如帖子中的评论所表明的,事实证明我错过了extern"C";在头文件中。因此,在我的代码中,我将include语句封装在一个外部"中;C";这解决了这个问题。

TLDR:代码中包含的头应该看起来像:

extern "C"      // Import C style functions 
{
#include <foo.h>
}

最新更新