2

I'm writing a dynamic library that's loaded at runtime as a plugin. At runtime, the library fails to load with the following message:

dlerror:/path/to/so: undefined symbol: fstat

The dynamic library consists of a bunch of static libraries linked together, including libsodium. I've tracked down libsodium as the only place that fstat() is used in the library.

As I understand it, fstat() should be part of libc, and should not require additional libraries to be installed. What am I missing?

EDIT1: I've found some additional information about how linking to fstat() is different than most functions, but I'm not sure exactly how it applies to my situation. I am compiling/linking libsodium with the provided makefiles for their distribution, and the dynamic library is being compiled with the compiler driver as recommended in that answer.

EDIT2: here's the linker command, generated by 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
leecbaker
  • 3,611
  • 2
  • 35
  • 51

0 Answers0