我遇到一个问题,我在运行时遇到此错误:“undefined symbol:someVar”。我想在链接时收到错误。
我想强制类似于此问题的链接错误: Easy check for unresolved symbols in shared libraries?
我正在使用scons,所以我正在寻找scons特定的答案。
我的scons规则如下:
def create_objs(SRCS):
return [env.Object(src) for src in SRCS]
object_mylib = ['mylib.c'
,'one.c'
,'two.c'
]
env.SharedLibrary('#/lib/mylib', create_objs(object_mylib))
我在scons中发现了添加链接器标志的问题: How do I add --whole-archive linker option in scons?
A)在这两个问题之后添加正确的标志是我最好的选择吗?
B)有更好的方法吗?
似乎有些人怀疑我在运行时遇到此错误,所以我添加了这个细节: 我收到这个错误:
could not load /somepath/libmylib.so for /somepath/libmylib.so: undefined symbol: someVar
关于此代码:
char *libFile = "/somepath/libmylib.so";
Handle = dlopen(libFile, RTLD_LAZY);
if (!Handle)
{
printf("could not load %s for %s", libFile, dlerror());
}
在运行时。
我的备份计划是编写一个执行dlopen的小程序并将其添加到SConscript。
答案 0 :(得分:0)
以下是我(OP)提出的答案: 添加
env.Append(LINKFLAGS=['-Wl,-z,defs'])
到SConstruct
现在这个命令运行:
gcc -o lib/libmylib.so -Wl,-z,defs -shared build/mylib.o build/one.o build/two.o
哪个输出此错误:
build/one.o: In function `somefunc':
/home/.../src/one.c:34: undefined reference to `someVar'
这对我有用。我会在接受这个答案之前等待,看看是否有人想出更好的技术或改进这项技术。