gpt4 book ai didi

c - 链接到外部库时符号名称中的下划线

转载 作者:行者123 更新时间:2023-11-30 18:02:46 26 4
gpt4 key购买 nike

我正在尝试编译一个 C 库,然后一些外部 C 代码喜欢它,并且我的外部代码在库中查找符号时遇到问题。我看不懂这部大片,希望有人能帮忙。详细信息如下:

1) 我正在 Mac 上工作。我已在 xcode 中将该库编译为静态 .a 库。

2)我正在尝试编译从库中调用函数的外部代码。我已经包含了头文件,并在 gcc 调用中指定了它的位置和库。编译似乎完成正常,但链接失败,提示找不到符号。

3) 缺少的符号被列为 _FunctionName,其中 FunctionName 是我调用的函数的名称。

我不清楚为什么编译器/链接器在我的函数名称中添加了下划线。但我天真的猜测是这就是为什么在库中找不到这些符号的原因。

外部代码编译是通过 MATLAB 的 mex() 函数完成的,该函数在后台进行下面的 gcc 调用。

我会很感激任何人可能有的任何想法。

gcc-4.2 -c  -Igsf_0303/ -I/Applications/MATLAB_R2011b.app/extern/include \
-DMATLAB_MEX_FILE -fno-common -no-cpp-precomp -arch x86_64 -isysroot \
/Developer/SDKs/MacOSX10.6.sdk -mmacosx-version-min=10.5 -fexceptions \
-DMX_COMPAT_32 -O2 -DNDEBUG "gsf_tester.c"

gcc-4.2 -O -Wl,-twolevel_namespace -undefined error -arch x86_64 -Wl, \
-syslibroot,/Developer/SDKs/MacOSX10.6.sdk -mmacosx-version-min=10.5 -bundle -Wl,\
-exported_symbols_list,/Applications/MATLAB_R2011b.app/extern/lib/maci64/mexFunction.map \
-o "gsf_tester.mexmaci64" gsf_tester.o gsf_0303/libgsf.a \
-L/Applications/MATLAB_R2011b.app/bin/maci64 -lmx -lmex -lmat -lstdc++

Undefined symbols:
"_gsfOpen", referenced from:
_mexFunction in gsf_tester.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

mex: link of ' "gsf_tester.mexmaci64"' failed.

最佳答案

这是一个猜测。首先,约阿希姆的评论是正确的。 C 函数名称前面总是带有下划线。所以这不是问题。

因此,要么 gfsOpen() 从库中丢失,要么它不可见,或者在链接 gfs_tester.o 时无法看到它。

因此请检查 gfsOpen 是否在库中。这应该可以做到

otool -t -v sgsf_0303/libgsf.a | grep gsfOpen

上面反汇编了文件,然后从中 grep 出您感兴趣的符号。可能有更好的方法,但我没有费心去研究。

检查它是否声明为静态

确保库的架构匹配 (otool -fv)

关于c - 链接到外部库时符号名称中的下划线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8943202/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com