我有一个名为libtest.so的C共享库,后者又使用另一个共享库lihelp.so。 libtest.so的代码使用dlopen()来加载libhelp.so
我已经将libtest.so与我的GO脚本gotest.go
集成在一起当我在构建和安装后运行gotest.go时,我看到libtest.so已成功加载并且libtest中的函数已成功执行。 但是在libtest.so中调用dlopen()来加载libhelp.so失败并显示错误“undefined symbol:dlopen”
但是,如果我编写一个使用libtest.so的C应用程序,所有执行都可以正常运行。
以下是我的Go文件的代码段
/*
#cgo CFLAGS: -I./include
#cgo LDFLAGS: -L. -ltest -ldl
*/
这是构建libtest.so的Makefile条目
CC = gcc # C compiler
CFLAGS = -c -fPIC -I./include # C flags
LDFLAGS = -shared -L/lib -ldl # linking flags
任何人都可以提出可能存在的问题吗?
输出我的二进制文件的ldd
ldd app
linux-gate.so.1 => (0xb77c3000)
libtest.so => ./libtest.so (0xb77bc000)
libgo.so.5 => /usr/lib/i386-linux-gnu/libgo.so.5 (0xb6ed0000)
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb6eb2000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb6d03000)
/lib/ld-linux.so.2 (0xb77c4000)
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb6ce7000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb6ca1000)