Я пишу динамическую c библиотеку, которая загружается во время выполнения в качестве плагина. Во время выполнения библиотека не может загрузить следующее сообщение:
dlerror:/path/to/so: undefined symbol: fstat
Библиотека Dynami c состоит из набора связанных между собой библиотек stati c, включая libsodium
. Я отследил libsodium
как единственное место, где fstat()
используется в библиотеке.
Насколько я понимаю, fstat()
должен быть частью libc
и не должен требовать дополнительных библиотек. быть установленным. Чего мне не хватает?
EDIT1: я нашел некоторую дополнительную информацию о том, как ссылка на fstat()
отличается от большинства функций, но я не совсем уверен, как она применяется к моя ситуация. Я компилирую / связываю libsodium
с предоставленными make-файлами для их распространения, а библиотека Dynami c компилируется с драйвером компилятора, как рекомендовано в этом ответе.
EDIT2: вот сгенерированная команда компоновщика CMake:
/usr/bin/c++ -fPIC -O3 -DNDEBUG -rdynamic -nodefaultlibs -undefined_warning -fPIC -fvisibility=hidden -shared -Wl,-soname,lin.xpl -o src/xplane_plugin/lin.xpl src/path/to/object/file1.cpp.o src/path/to/object/file2.cpp.o src/plugin/libplugin.a /usr/local/lib/libpng16.a -lz src/plenty/of/dependencies.a lib/glew/libglew.a src/another/library.a /usr/local/lib/libsodium.a /usr/lib/x86_64-linux-gnu/libcurl.so lib/json11/libjson11.a -lpthread deps/some/library.a /usr/local/lib/libzip.a -lbz2 -llzma -lssl -lcrypto -lstdc++fs -lz