提问人:user2562211 提问时间:5/5/2021 更新时间:5/5/2021 访问量:364
链接器错误未定义引用,即使在共享库中定义函数也是如此
Linker error undefined reference even if functions are defined in shared library
问:
我正在尝试修改一段C++代码(在 Linux 下使用 gcc 工具链开发),使用在两个库中定义的新功能,一个共享库(称为 libsio4_api.so)和一个静态库(称为 sio4_main.a)。原始代码是使用一个 makefile 构建的,该 makefile 首先创建一个共享库,链接各种对象文件,然后将此库与主对象文件链接。 这是链接共享库的行:
g++ -s -shared main.o RTLinkResolution.o IORefresh.o UserProgramImpl.o UserProgramDataManager.o UserProgramCode.o -L./genericFiles/lib -lUserProgramEnvironment -lm -o libUProg.so
我以这种方式修改了它以将我的库添加到链接中(其中一个需要 -pthread):
g++ -s -shared -pthread libsio4_api.so sio4_main.a main.o RTLinkResolution.o IORefresh.o UserProgramImpl.o UserProgramDataManager.o UserProgramCode.o -L./genericFiles/lib -lUserProgramEnvironment -lm -o libUProg.so
此链接终止时没有错误,在生成的库中,我可以看到我想使用的函数(在此示例中,我只显示一个函数,但也显示了其他函数):
nm -D libUProg.so | grep sio4_async_init
000000000006d581 T sio4_async_init
000000000006dcae T sio4_async_init_data
U _Z15sio4_async_initv
问题是,当最终链接完成时,找不到函数:
g++ -o test main.o libUProg.so -pthread sio4_main.a libsio4_api.so
libUProg.so: undefined reference to `sio4_async_close(int)'
libUProg.so: undefined reference to `sio4_async_init()'
libUProg.so: undefined reference to `sio4_async_open(int, int, int*)'
我已经在其他主题中搜索了类似的问题,我发现将库馈送到链接器的顺序很重要,但即使我在最终链接命令中更改了顺序,也找不到这些函数。 有人对我如何进行有任何线索吗?
答: 暂无答案
下一个:C++ 模块中静态库的链接错误
评论
extern "C"
libUProg.so
extern "C"