问题标签 [libstdc++]

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 回答
2169 浏览

dynamic - libstdc++ 的库搜索路径

我已经使用 GLIBCXX_3.4.11 编译了针对 libstdc++.so 动态链接的共享库。我想将我的代码发送给 stdc++ 库仅为 3.4.10 版本的人。而不是要求他更新他的库版本(这是一个软件客户,所以我不能假设他们愿意或能够更改系统文件)我想发布适当版本的 libstdc++.so,放置在lib 文件夹,其中包含我的代码的目录位置。如何获得自己的代码以使用适当的(更高版本)版本?我发现 /etc/ld.so.conf 包含目录 /lib64,其中存在有问题的旧版本 libstdc++.so。设置 LD_LIBRARY_PATH 不会覆盖它。这似乎偏离了宣传的行为。知道为什么会这样吗?我如何完成我相当简单的任务?

谢谢。

0 投票
1 回答
841 浏览

gcc - 在 Windows 上使用调试符号构建 GCC 的 libstdc++

我正在使用 GCC 开发一个应用程序,主要是在 Windows 上,直到我遇到无法使用我拥有的 MinGW 工具链构建进行调试的崩溃。我安装了一个 Linux VM,并在那里调试它,这是可能的,因为 libstdc++ 有我需要的符号。

我确信 libstdc++ 的 Linux 版本是一个发行版(优化版),因为安装它以供所有应用程序使用是正常的。与 Windows 版本相同。但是,Linux 版本如何内置必要的调试符号,或者如果我问我真的想回答的问题:如何构建 GCC 的 libstdc++ 以便从中获得有用的堆栈跟踪,并且仍然对其进行优化? (注意:我能够重新编译 GCC/MinGW,所以这不是问题)

我知道 Visual Studio 有调试版本和发布版本,但从未听说过类似的 Linux 版本。我记得调试符号总是在单独的包中。

信息:我使用的是安装了普通 GCC 包的 Arch linux(没有明确选择特殊的调试版本)。

0 投票
2 回答
939 浏览

gcc - 在 ubuntu 11.04 上自定义构建的 gcc 4.6.0 链接错误的 libstdc++

我的自定义构建的 gcc 4.6.0 安装在我的主目录中,在 ubuntu 10.04 上,大多数时候链接系统 libstdc++ 而不是自定义构建的(如 ldd 所证明的那样)。更令人费解的是,使用这个新构建的 gcc,自定义编译的 openmpi 库被正确链接,这是我编译的唯一表现正常的软件。有人对此有任何解释或解决方法吗?

谢谢

0 投票
2 回答
177 浏览

c++ - 使用用较新版本的 g++ 编译的共享对象

我有一些必须用 g++4.5 编译的共享对象,我希望它们能够链接到使用 g++4.1 和 g++4.2 编译的应用程序中。

据我了解,他们不能保证不同版本的 libstdc++ 将相互兼容,因此如果不进行一些更改,这将无法正常工作。

除了在目标机器上安装较新版本的 g++ 及其相关库之外,是否有一种标准方法可以做到这一点?

0 投票
2 回答
5493 浏览

c++ - 无法在另一台使用 OS-X Leopard (10.5.8) 的 Mac 上运行在 OS-X Snow Leopard (10.6.7) 上编译的应用程序。libstdc++.6.dylib 错误返回

我正在尝试在 Max OS-X 上使用 C++0x 和 Ogre 移植 C++ 项目,但在 OS-X 版本之间遇到了可移植性问题。

我使用 GCC 4.6.0 成功地在 Mac OS-X 10.6 (Snow Leopard) 上编译了我的项目(因为我需要 C++0x)。这很难(可能是因为我是一个新的 OSX 用户)但它最终编译它没有错误。

我在 Application.app 包中包含了所有必需的组件、框架、插件等,它在这个 Mac OS-X 10.6 上运行良好

但是,当我在安装了 Mac OS-X 10.5.8 的旧笔记本电脑上传输项目时,我无法运行该应用程序。

如果我双击 .app 它会尝试启动,最后图标从菜单栏中消失,仅此而已。但是,如果我直接运行 .app 中包含的可执行文件,则会返回以下错误:

这是应用程序包树视图。

我的项目.app

  • 成分
    • ... (食人魔组件)
  • 构架
    • Ogre.framework
  • 苹果系统
    • 我的项目 (可执行文件)
  • 插件
    • ... (食人魔插件)
  • 资源
    • ... (食人魔 .cfg + 我的资产)

我告诉 Cmake 使用 MacOSX10.5.sdk 使用(在 Cmake GUI 内设置,而不是在 CMakeList.txt 内设置):

  • CMAKE_OSX_DEPLOYEMENT_TARGET 10.5
  • CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.5.sdk

但这似乎并没有改变任何东西......


libstdc++.dylib 文件链接到 Mac 上用于编译应用程序的 libstdc++.6.0.9.dylib,而它链接到 Mac 上用于测试可移植性的 libstdc++.6.0.4.dylib。

但正如我告诉它使用 MacOSX10.5.sdk 我虽然它会在编译时使用 libstdc++.6.0.4.dylib,所以它可以在安装了 10.5 的 Mac 上运行

事实上,我们的目标是让它在第二台 Mac(以及所有使用 10.5+ 的 Mac)上运行,而不需要对其进行任何更改。只需下载并运行...

有人可以告诉我我在这里缺少什么吗?(我对 OS-X 的方法和组织不是很流利,所以我可能会错过一些非常基本的东西,不要害怕粗鲁^^)。

如何在 Cmake 中指定目标 SDK?(使用的 Cmake 命令还不够吗?)


我使用以下内容来编译我的项目:

  • Mac OS-X 10.6.7
  • GCC 4.6.0
  • Cmake 2.8-4
  • 食人魔 1.7.3

我使用以下内容来测试项目:

  • Mac OS-X 10.5.8(安装了一些开发工具。我想我必须告诉它,以防它干扰应用程序)。

编辑:

正如我在这里发现的 otool 是返回的日志

显然它链接到 gcc46 libstdc++.6.dylib(可能是正常的,因为我猜这个文件包含 GCC 4.6.0 的 C++0x 函数)。

那么有什么解决办法吗?(-static 返回一个错误,告诉我需要动态...)

0 投票
1 回答
2193 浏览

c++ - 部署使用 GCC 4.6 编译的 OSX 应用程序

我正在尝试在 Mac OS-X 上移植我的一个项目。

当我使用 C++0X 开发我的项目时,我需要一个比 Xcode(甚至是 Xcode4)提供的版本更新的 GCC,所以我在我的 Snow Leopards Mac 上编译了 GCC 4.6。

我的项目编译得很好,它也可以在我编译它的计算机(OS-X 10.6.7)上启动,但是当我将它传输到我的 MacBook(OS-X 10.5.8)时它不起作用。

它返回以下错误:

dyld:惰性符号绑定失败:找不到符号:__ZNSo9_M_insertImEERSoT_ 引用自:/Users/zu/Desktop/OgreApp.app/Contents/MacOS/OgreApp 预期在:/usr/lib/libstdc++.6.dylib

dyld:找不到符号:__ZNSo9_M_insertImEERSoT_ 引用自:/Users/zu/Desktop/OgreApp.app/Contents/MacOS/OgreApp 预期在:/usr/lib/libstdc++.6.dylib

我知道该程序需要 GCC 4.6.0 的 libstdc++.6.dylib,因为该文件包含 C++0x 函数(尽管我当前的测试不使用任何 C++0x 函数)而不是标准的 libstdc++.6.dylib 通常包含在 OS-X 系统中。

所以我尝试了以下方法:

  • 指定-isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5以确保向后兼容 OS-X 10.5。但错误仍然是一样的。

  • 使用otool -L验证 libstdc++.6.dylib 路径并使用install_name_tool -change /opt/local/lib/gcc46/libstdc++.6.dylib @executable_path/../Libraries/libstdc++.6.dylib更改共享库路径OgreApp(在库文件夹中带有 gcc 4.6.0 libstdc++.6.dylib 的副本)作为我之前问题的答案的建议。但错误仍然是一样的。

  • 使用-static-libgcc - static-libstdc++静态链接 libstdc++ 和 libgcc 。但它仍然返回相同的错误。

当我的程序使用 Ogre 框架时,我也将上述操作应用于嵌入在 Ogre.framework 中的 Ogre 可执行文件,但它并没有改变任何东西。

有谁可以解释我应该如何在另一台安装了旧版本的 Mac 计算机上部署使用非标准 libstdc++ 创建的应用程序(我想问题与运行 Snow Leopard 的计算机相同,因为程序使用 GCC 4.6 .0 libstdc++) ?

0 投票
0 回答
2150 浏览

macos - 如何在 OS X 10.5 上更新 libc 和 libstdc++?

我使用 Mac Mini 作为构建代理,我需要升级标准库。我在 MacPorts 上找不到 libc 或 libstdc++。

0 投票
1 回答
24100 浏览

c++ - valgrind 未检测到的 malloc_consolidate (malloc.c) 中的分段错误

我的程序出现分段错误,我找不到原因。最糟糕的是,有问题的函数并不总是导致段错误。

GDB 确认了这个错误并产生了这个回溯:

GetSAddress 类的方法将数字 ( uint32_t m_address) 转换为字符串并返回。代码(非常简单)如下:

此外,从回溯中可以看出,m_address是正确定义的。

现在,我尝试使用 valgrind 运行我的程序。该程序不会崩溃,可能是因为 valgrind 替换malloc ()了其他功能。

错误摘要显示没有内存泄漏:

possibly lost指的是这样的回溯:

我认为这与错误无关。但是,可以在此链接之后找到相关代码。

我在想libstdc++. 然而,这种可能性有多大?我也升级了这样的图书馆。这是我系统上当前安装的版本。

现在的问题是,我不确定g++使用哪个版本,以及是否有一些方法可以强制使用特定版本。

我正在琢磨的是修改GetS. 但这是我知道的唯一方法。你有什么替代方案吗?

最终,我什至考虑std::string用更简单char*的 . 也许有点激烈,但我不会把它放在一边。

有什么优点吗?

谢谢大家。

最好的,吉尔

0 投票
1 回答
10755 浏览

c++ - 如何静态链接 libstdc++

我试图让我的程序在另一台 libstdc++ 版本不同的机器上工作。我正在netbeans上开发和编译它。我已指定选项 -static-libstdc++ 但程序继续尝试在本地机器中加载 libstdc++.so.6。

如何获得完全静态的 libstdc++ 链接?

谢谢。

0 投票
2 回答
2199 浏览

solaris - solaris sparc 9/10 libstdc++ 兼容性问题(64 位)

我在 sparc9 和 sparc10 系统上安装了 gcc 3.4.6。当我尝试在 sparc10 上使用共享对象(基于 sparc9 构建)时,我遇到了不兼容问题。如果我在 sparc9 系统上使用相同的共享对象,我没有看到任何问题。来自makefile的片段:-

现在跟随 sparc10:-

我在上面的输出中跳过了其他看起来正常的依赖项。

然后,我针对上述未引用符号在 /usr/local/lib/sparcv9 中针对 libstdc++.so.6 运行“nm”并得出以下结论:-

如果您仔细观察,您会发现 sparc9 和 sparc10 中的名称符号不同...“ExSt12”与“ElSt12”。

同样,如果我在 sparc10 上构建 myapi.so,由于 V9 和 V10 中的符号不​​匹配,它会在 sparc9 上失败。

有人可以指出我是否遗漏了什么有用的提示吗?或者我需要在 V9 上安装任何软件包吗?我假设基于 V9 构建的共享对象应该可以在 V10 上运行。

我想补充一点,V9 上的 libstdc++.so.6 的大小与 V10 不同。V9 具有 SMCgcc,V10 具有 SUNWgccruntime 和 SMCgcc。