问题标签 [undefined-symbol]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - 将 linux 编译的程序移植到 macOS 时获取未定义的符号
我正在尝试在 MAC OSX 上编译一个程序,该程序最初是在 Linux 操作系统上编写的。这是一个包含多个 makefile 的大程序。我已经研究了几个星期,现在似乎无法弄清楚为什么会导致未定义的符号错误。有一个总体 Makefile 调用其他 makefile,以便编译顺序正确。
编译时,它会创建静态库以及多个应用程序。因为这家伙太大了,程序首先创建了这些静态库(.a 文件)。然后,当它专门为应用程序编译源代码时,它会链接静态库。(希望这不会太令人困惑)。
我可以很好地完成静态库的构建,但是一旦我到达构建应用程序的地步,我就会收到大量未定义的符号错误告诉我,例如
未定义符号:“_bagUpdateOptSurface”,引用自:libdbdbv6.a(dbv_bag.o) 中的 _dbv_bag
当我用 nm 检查 dbv_bag.o 时,我得到了很多未使用标题 U 定义的函数。
我可以用 nm 追溯这个函数并发现......
bagUpdateOptSurface.c -->bagUpdateOptSurface.o -->libbag.a --->dbv_bag.c --->dbv_bag.o --->libdbdv6.a --->应用程序
该函数是通过带有标题 T 的静态库 libbag.a 定义的,但目标文件 dbb_bag.o 将其与 U 定义为未定义。在那里的某个地方信息丢失了,我似乎无法理解为什么。
如果那里有更多经验将程序移植到mac的人可以帮助了解正在发生的事情,我将非常感激。欢迎任何想法对或错。
提前致谢
ios - LibEtPan / iOS:未找到符号……
我尝试使用 LibEtPan 作为邮件客户端的后端。我从https://github.com/dinhviethoa/libetpan下载了源代码,也从https://github.com/bindle/iOSPorts下载了其他库。我运行了 LibEtPan build-mac/update.sh 并将 libetpan.xcodeproj 以及 openldap.xcodeproj、openssl.xcodeproj、Cyrus SASL.xcodeproj 添加到我的项目中。
我设置了以下目标依赖项:libetpan ios (libetpan), lber (openldap), ldap (openldap), crypto (openssl), ssl (openssl), sasl2 (Cyrus SASL) and I Linked Binary With Libraries: libetpan-ios.a, libiconv.dylib, liblber.a, libldap.a, libcrypto.a, libsasl2, libssl.a
但是一旦我调用类似 mailimap_new 的东西,我就会收到错误消息:
(与 armv7 或其他架构相同)
我不知道我必须另外包含哪个库。
c - 无法加载共享库:未定义的符号
我在 linux (ubuntu) 系统上有自己的带有插件(动态共享库)的程序。我的库(插件)使用 OpenCV(可能不那么重要)。
我的插件位于 /usr/local/lib/mysoft/。
即使使用库,我也成功编译了我的程序,成功安装,所以到目前为止一切似乎都很好。
当我运行我的程序时,它会根据一些配置文件加载一堆这些库。我有几个已成功加载的库,但我无法加载一个库。加载时出现错误(使用 dlopen() 打开库):
显然,要找到作为 OpenCV 一部分的 cv::resize 存在一些问题,但我不明白为什么。
我检查了以下内容:
- OpenCV 可能已正确安装,因为其他库也使用它并且加载时没有问题
- 我的程序没有依赖项,libMyPlugin2.so 或 OpenCV 丢失(用 ldd 检查)
- 所有库和二进制文件的架构似乎都是相同的(我用 objdump -f 检查了它)
有人知道我在做什么错吗?
这篇文章似乎很相关,但仍然没有帮助: Linux shared library that uses a shared library undefined symbol
macos - 尝试编译 RtAudio 时出现未定义的符号
我正在尝试同时使用 RtAudio 和 RtMidi。我在同一个文件夹中包含 RtAudio.cpp、RtAudio.h、RtHelper.h、RtMidi.cpp 和 RtMidi.h 以及 2 个测试程序 midiprobe.cpp 和 audioprobe.cpp。
使用默认命令编译 midiprobe 是可行的,但是当我尝试对audioprobe执行相同操作以测试 RtAudio 时,我得到了错误。
这是我用来编译的:
这些是错误:
我对这类东西很陌生(到目前为止,大部分框架都是现成的)并且还没有弄清楚这一点。由于它是默认示例,我真的不知道下一步该做什么......在此先感谢。
c++ - Boost 线程析构函数未定义符号
我正在使用 OSX Mountain Lion。我刚刚使用 boost 网站提供的说明下载、解压缩并构建了 boost 1.52.0:http: //www.boost.org/doc/libs/1_52_0/more/getting_started/unix-variants.html。我将默认的安装前缀保留在/usr/local
,这意味着库安装在/usr/local/lib
,头文件在/usr/local/include
. 我已经验证了库和头文件在那里并且最近被修改过。
我正在尝试编译此处找到的 boost 异步 I/O 示例:http: //www.boost.org/doc/libs/1_52_0/doc/html/boost_asio/tutorial/tuttimer5/src.html(来源)。
这是我的编译命令:
其中 src/test1.cpp 是示例源文件。这是我的链接命令(和错误):
我尝试过使用 Apple 的 clang++ 4.0 和 g++ 4.6.0。我从两个程序中得到相同的未定义符号错误。
其他人似乎也无法编译此代码示例。我知道这个问题:C++ / Boost: Undefined Symbols in example?还有这个:编译 boost.asio 示例时出现链接器错误。但是,这些问题中的每一个似乎都已通过在命令行中添加适当的开关(-lboost_thread 和 -lboost_system)得到解决。我已经有了这些。我也试过添加 -lpthread 没有运气。
感谢您花时间看我的问题!任何帮助表示赞赏。:)
ios - 架构 armv7 的 iOS 链接器错误的 Google 转换跟踪
我正在尝试将 Google Conversion Tracking for iOS 功能添加到我的 iPhone 应用程序中。应用程序的基础 SDK 是 iOS6 应用程序的有效架构是 armv7, armv7s 应用程序的 iOS 部署目标是 4.3 我正在使用最新的 xcode 4.5.2 和 OSX 10.8.2
该应用程序在 appstore 中,适用于 iPhone 3-4-5
当我尝试通过以下链接添加适用于 iOS 的 Google 转化跟踪时:https ://developers.google.com/mobile-ads-sdk/docs/admob/conversion-tracking
我有这个错误:
segmentation-fault - 由于链接问题,程序无法运行
我在执行二进制文件时遇到了麻烦。程序收到分段错误。过滤是 gdb 的输出
然后我使用了 nm 实用程序
我发现许多符号未定义。这个 a.out 二进制文件实际上是通过链接许多其他 .so 获得的。我在其中一个 .so 上做了 nm
该程序与上面的 libmylib.so 链接。在链接过程中我没有收到任何错误。
但是,如果没有 -shared 选项,我会收到以下错误
可能是什么问题呢?有人可以建议我如何解决这个问题吗?提前致谢
python - 级联库依赖
由于此处无法解释的原因,我需要在“C”中创建一个可在 Python 中调用的共享库(称为 libA)。这个共享库需要调用另一个自定义共享库(我们将其命名为 libCuda)。此外,libA 还调用了许多其他外部共享库,例如 MySQL 等。
在包含 libCuda 之前,在 Python 中调用的所有 C 函数都可以正常工作,MySQL 子调用也可以正常工作,等等。但是,一旦将 libCuda 添加到 libA,Python 就会抱怨:
libCuda,正如您可能已经猜到的那样,是使用 nvcc 编译的 nVidia Cuda 代码并设置为可 C 链接(即在函数原型中导出“C”)我已经使用独立测试台测试了这个共享库(libCuda)(编写在 C) 中,一切都按预期工作。这是用于编译 Cuda 库的指令:
如果我使用:
我没有看到任何信息表明 libA 需要加载 libCuda(或 MySQL)
用于编译 libA 的命令如下(libCuda 位于本地目录中):
我尝试将两个库文件都放在 /usr/lib 中并显式导出 LD_LIBRARY_PATH。没运气。任何帮助将不胜感激!
c++ - 无法将 boost 库连接到我的项目“符号查找错误”
我有以下情况:
我创建了动态库 lib.so。该库使用另一个静态库 lib.a。它们都使用 Boost 库(我将它们链接到 CMake 文件中)。(我在Java项目中使用这个动态库)
这是 lib.so 中 file.cpp 的代码,它从 lib.a 调用 getFilesFromDirectory()
这是来自 lib.a 的 getFilesFromDirectory() 代码:
但是当我的项目调用 lib.so 库时,它会引发以下消息:
当我发现它在 lib.a 中崩溃时,它试图调用 boost 方法“路径”。但是我声明了所有的 boost 头文件,并将它们链接到 CMake 文件中。你能解释一下,为什么它不能识别提升方法?
编辑:
我的编译器 gcc 4.6 的版本。如果我使用 4.5 一切都很好!
此外,如果我直接在 lib.so 中的 file.cpp 中使用一些 boost 方法,一切正常,例如:
但
}
你如何解释编译器的这种行为?
请注意,该错误发生在运行时。
解决了
问题在于 CMake 文件中 *target_link_libraries* 中的库的顺序。
错误的:
对:
c++ - Lua:C ++模块不能相互引用,未定义的符号
我创建了两个模块(共享对象)CPU 和 SaveState 作为模拟器的一部分。两者都被独立编译成 .so 单独的文件,并在运行时由 Lua 脚本使用 require() 加载;IE:
在 CPU 中,有一个对 SaveState 进行操作的方法:
它编译得很好,但require("CPU")
行失败:
使用nm -D
我可以在 savestate.so 中看到确切的符号,但在运行时由于某种原因看不到它。