我正在开发一个必须在linux和mac OS X上编译的库。到目前为止,我没有任何问题,在这两个操作系统上用"-g“编译都很好。
我试着用一些优化("-O2")来编译,它在linux下运行得很好,但是当我在mac os X上尝试链接一个程序和我的库时,我得到了一个未定义的符号。
有谁知道我该找什么吗?
nm mylib.a | grep _the_symbol
这将为linux和mac返回相同的结果(linux下没有前导下划线):
154:00000018 C _the_symbol
377: U _the_symbol
下面是linux下使用该库的程序
通过在project Navigator中将框架拖放到项目中,我在Xcode4.4项目中添加了一个框架。
我在Xcode上得到了未定义符号的链接器错误。
未定义的体系结构符号:"_returner",引用自:_should_be_returned in RapidEarsDemo(multisphinx_re.o) "_input_sample_rate",引用自:-PocketsphinxController(RapidEars) armv7 in _input_sample_rate(-PocketsphinxController)RapidEars in
我正在试图找到导入外部符号的共享库。目前,我可以通过使用nm或许多替代方案(如使用radare2 )获得所有导入的符号。我还可以通过使用ldd获得二进制所依赖的库。但是,由于找不到有效的方法来获取二进制文件中的哪个外部符号依赖于哪个共享库,我就陷入了困境。因此,例如,如何找到一个共享库,它可以高效地导出名为foo或printf的函数或任何东西?我举一个例子:
Output of nm -D myfile
w __cxa_finalize
U foo
w __gmon_start__
有一个针对-lyaml编译的库。但是libyaml.so并没有被ldd列为依赖项。正在使用autoconf工具链成功进行构建。
$ nm libxxxx.so | grep -i yaml
U yaml_document_delete
U yaml_document_get_node
U yaml_parser_delete
U yaml_parser_initialize
U yaml_parser_load
U yaml_parser_set_input_file
$ readelf -d libxxxx.so
Tag Type