强制编译时错误为"未定义符号"在scons

时间:2014-07-17 03:56:40

标签: c scons

我遇到一个问题,我在运行时遇到此错误:“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。

1 个答案:

答案 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'

这对我有用。我会在接受这个答案之前等待,看看是否有人想出更好的技术或改进这项技术。