我遇到一个问题,在运行时出现此错误:“ 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 中。
最佳答案
这是我(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'
这对我有用。在接受这个答案之前我会等待一段时间,看看是否有人提出更好的技术或对此技术的改进。
关于c - 强制 scons 中出现 "undefined symbol"编译时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24794651/