即使在共享库中定义了函数,链接器错误未定义引用

问题描述

我正在尝试使用在两个库中定义的新函数修改一段 C++ 代码(在 Linux 下使用 gcc 工具链开发),一个共享库(称为 libsio4_api.so)和一个静态库(称为 sio4_main 。一种)。原始代码是用一个 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*)'

我已经在其他主题搜索了类似的问题,我发现将库提供给链接器的顺序很重要,但即使我更改了最终链接命令中的顺序,也找不到这些函数。 有人知道我该如何继续吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)