我在linux中创建一个运行时加载的共享对象,它使用jannson.h来实现一些JSON。
这就是我正在构建.so:
的方式gcc -Wall -fPIC -c device_simulator_json.c
gcc -shared -Wl,-soname,device_simulator_json.so.1 -o device_simulator_json.so.1.0 device_simulator_json.o
当我的应用程序尝试加载.so时,我收到错误指示: 未定义的符号:json_object
我猜我的.so必须包含jansson对象。但我不确定是哪一个或如何。我可以在/ usr / local / lib中看到以下jansson对象:
./usr/local/lib/libjansson.so.4.7.0
./usr/local/lib/libjansson.so.4
./usr/local/lib/libjansson.a
./usr/local/lib/libjansson.so
因为.so我的构建是在运行时动态加载的(使用dlopen),所以我使用的jansson对象也不必使用PIC构建。
感谢。
答案 0 :(得分:1)
您可能应该在共享库中链接libjansson.so
:
gcc -L/usr/local/lib -shared -Wl,-soname,device_simulator_json.so.1 \
-o device_simulator_json.so.1.0 device_simulator_json.o -ljansson
或者,您可以将-ljansson
链接到主程序(执行dlopen
)。然后,您最好将该程序与-rdynamic
gcc -Wall -Wextra -g -fPIC -c device_simulator_json.c
调试完所有内容后,您可以使用-O2