c - 强制 scons 中出现 "undefined symbol"编译时错误

标签 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 中。

最佳答案

这是我(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/

相关文章:

c - 在C中定义变量参数宏

python - scons -u 和 variantdirs

python - 如何设置vsvars32环境变量?

scons - 如何解决 "scons: warning: Two different environments were specified for target"

c - 格式 ‘%f’ 需要类型为 ‘float*’ 的参数,但参数 2 的类型为 ‘float (*)[(((sizetype)

c - 2014a 上的 Matlab C 网关和 Fortran 源混合 mex 函数

c - 是否有一种排序算法使用二叉树按位排序?

C - 大输入时的内存泄漏

c++ - 在错误的平台上使用 Scons 链接器搜索构建 iOS 静态库

fortran - Scons 教程,重点是 Fortran