Я делаю программу, которая должна быть связана со сторонним 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 содержит. поэтому файлы и 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
Что я здесь не так делаю?