【发布时间】:2020-03-18 16:15:08
【问题描述】:
我正在制作一个需要链接到第三方 SDK 的程序,该 SDK 以头文件和预编译共享库的形式出现。
程序本身很简单,它只是从库中调用一个函数:
#include <dhnetsdk.h>
int main() {
CLIENT_Init(nullptr, 0);
}
然后我编译它
g++ -std=c++17 -O3 -ldhnetsdk -lavnetsdk -ldhconfigsdk -lInfra -lNetFramework -lStream -lStreamSvr trigger/src/main.cpp -Lsdk/bin -Isdk/include
sdk/bin 包含 .so 文件,sdk/include 包含 dhnetsdk.h 文件,其中 CLIENT_Init 被声明为 extern "C" int CLIENT_Init(void(*)(long long, char*, long), long);
我检查了nm 和 sdk/bin/libdhnetsdk.so 确实导出了CLIENT_Init 符号,但由于某种原因,链接器无法找到它并失败:
/usr/bin/ld: /tmp/ccovgfxa.o: in function `main':
main.cpp:(.text.startup+0x9): undefined reference to `CLIENT_Init'
collect2: error: ld returned 1 exit status
我在这里做错了什么?
【问题讨论】:
-
5 美元表示该链接中的答案,但 10 美元表示除非您逐个尝试每个答案或已经知道问题所在,否则您将无法在其中找到正确答案。 Darhuuuk 可能是对的,它正在订购。我肯定会从那里开始。
-
是的,它正在订购。将
trigger/src/main.cpp拖到开头。
标签: gcc g++ shared-libraries