我正在使用以下说明构建一个共享库:
cc -shared -Wl,-soname,libmy.so.0 [lots of .o files] -o libmy.so.0
ln -f -s libmy.so.0 libmy.so
我不知道这是否重要,但这个库是用 C 编写的。
然后我尝试从 C++ 程序链接到这个库:
/usr/bin/c++ -g CMakeFiles/codegen.dir/client/codegen.cpp.o CMakeFiles/codegen.dir
/namenode/shared_objects.cpp.o -o codegen -rdynamic -L/path/to/libmy -lpthread
-lboost_system-mt -lboost_filesystem-mt -lboost_unit_test_framework-mt
-lboost_serialization-mt -lmy -Wl,-rpath,/path/to/libmy
但是ld报错:
CMakeFiles/codegen.dir/client/codegen.cpp.o: In function `main':
[...]/src/client/codegen.cpp:46:
undefined reference to `alloc_code(int, int, int, int, int)'
即使alloc_code
似乎在共享库中:
$ nm libmy.so | grep alloc_code
0000000000002c80 T alloc_code
请注意,libmy.so
我的codegen
程序是使用不同的编译器标志编译的(一个在调试模式下编译,而另一个在优化模式下编译),但我认为问题不是来自这里。
是什么导致ld
无法链接?codegen
libmy.so