c++ - 即使在共享库中定义了函数,链接器错误未定义引用
问题描述
我正在尝试修改一段 C++ 代码(在 Linux 下使用 gcc 工具链开发),在其中使用两个库中定义的新函数,一个共享库(称为 libsio4_api.so)和一个静态库(称为 sio4_main.a) . 原始代码是使用 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# - 在 for 循环中声明索引时的奇怪行为
- php - 警告:file_get_contents():文件名不能为空(被 if 条件覆盖)
- python - 多索引和多列分组
- azure - 使用 Logic App 从 JSON 响应从 String 转换为 int
- actions-on-google - 使用会话 Webhook 推送通知
- android - 数据更新后从 recyclerView 中删除项目
- react-native - 尝试结束代码时不断出现基于 React Native Maps 的解析错误
- android - Android Studio 3.5.2 找不到 USB 连接设备(但通过 adb 终端找到)
- python - AttributeError:“str”对象没有属性“find_all”
- html - 如何在不创建空白区域的情况下使图像被窗口大小吞噬