问题标签 [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.

0 投票
1 回答
638 浏览

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的人可以帮助了解正在发生的事情,我将非常感激。欢迎任何想法对或错。

提前致谢

0 投票
0 回答
263 浏览

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 或其他架构相同)

我不知道我必须另外包含哪个库。

0 投票
1 回答
4157 浏览

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

0 投票
1 回答
1155 浏览

macos - 尝试编译 RtAudio 时出现未定义的符号

我正在尝试同时使用 RtAudio 和 RtMidi。我在同一个文件夹中包含 RtAudio.cpp、RtAudio.h、RtHelper.h、RtMidi.cpp 和 RtMidi.h 以及 2 个测试程序 midiprobe.cpp 和 audioprobe.cpp。

使用默认命令编译 midiprobe 是可行的,但是当我尝试对audioprobe执行相同操作以测试 RtAudio 时,我得到了错误。

这是我用来编译的:

这些是错误:

我对这类东西很陌生(到目前为止,大部分框架都是现成的)并且还没有弄清楚这一点。由于它是默认示例,我真的不知道下一步该做什么......在此先感谢。

0 投票
2 回答
517 浏览

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 没有运气。

感谢您花时间看我的问题!任何帮助表示赞赏。:)

0 投票
1 回答
3053 浏览

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

我有这个错误:

0 投票
1 回答
1029 浏览

segmentation-fault - 由于链接问题,程序无法运行

我在执行二进制文件时遇到了麻烦。程序收到分段错误。过滤是 gdb 的输出

然后我使用了 nm 实用程序

我发现许多符号未定义。这个 a.out 二进制文件实际上是通过链接许多其他 .so 获得的。我在其中一个 .so 上做了 nm

该程序与上面的 libmylib.so 链接。在链接过程中我没有收到任何错误。

但是,如果没有 -shared 选项,我会收到以下错误

可能是什么问题呢?有人可以建议我如何解决这个问题吗?提前致谢

0 投票
2 回答
190 浏览

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。没运气。任何帮助将不胜感激!

0 投票
1 回答
1671 浏览

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* 中的库的顺序。

错误的:

对:

0 投票
1 回答
807 浏览

c++ - Lua:C ++模块不能相互引用,未定义的符号

我创建了两个模块(共享对象)CPU 和 SaveState 作为模拟器的一部分。两者都被独立编译成 .so 单独的文件,并在运行时由 Lua 脚本使用 require() 加载;IE:

在 CPU 中,有一个对 SaveState 进行操作的方法:

它编译得很好,但require("CPU")行失败:

使用nm -D我可以在 savestate.so 中看到确切的符号,但在运行时由于某种原因看不到它。