问题标签 [gcc]

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 投票
2 回答
5215 浏览

c - 如何 BSWAP 64 位寄存器的低 32 位?

我一直在寻找如何将 BSWAP 用于 64 位寄存器的低 32 位子寄存器的答案。例如,0x0123456789abcdef在 RAX 寄存器中,我想0x01234567efcdab89用一条指令将其更改为(因为性能)。

所以我尝试了以下内联函数:

结果是0x00000000efcdab89。我不明白为什么编译器会这样。有人知道有效的解决方案吗?

0 投票
11 回答
20191 浏览

windows - 为什么 GCC-Windows 依赖于 cygwin?

我不是 C++ 开发人员,但我一直对编译器很感兴趣,而且我对修补一些 GCC 的东西(尤其是 LLVM)很感兴趣。

在 Windows 上,GCC 需要 POSIX 仿真层(cygwin 或 MinGW)才能正确运行。

这是为什么?

我使用许多其他软件,用 C++ 编写并针对不同平台(Subversion、Firefox、Apache、MySQL)进行交叉编译,它们都不需要 cygwin 或 MinGW。

我对 C++ 最佳实践编程的理解是,您可以编写合理的平台中立代码并处理编译过程中的所有差异。

那么与 GCC 有什么关系呢?为什么它不能在 Windows 上本地运行?


编辑:

好的,到目前为止,这两个回复基本上说,“GCC 使用 posix 层,因为它使用 posix 标头”。

但这并不能真正回答问题。

假设我已经为我最喜欢的标准库准备了一组头文件。为什么我仍然需要 posix 标头?

GCC 是否需要 cygwin/mingw 才能实际运行

还是只需要头文件和库的仿真层?如果是这样,为什么我不能只给它一个包含所需资源的“lib”目录?


再次编辑:

好的,我会再次尝试澄清问题...

我还用D 编程语言编写代码。官方编译器名为“dmd”,并且有适用于 Windows 和 linux 的官方编译器二进制文件。

Windows 版本不需要任何类型的 POSIX 仿真。Linux 版本不需要任何类型的 Win32 仿真。如果编译器对其环境有假设,它会很好地隐藏这些假设。

当然,我必须告诉编译器在哪里可以找到标准库以及在哪里可以找到静态或动态链接的库。

相比之下,GCC 坚持假装它在 posix 环境中运行,它要求我通过设置一个仿真层来满足这些假设。

但是,在 GCC 中,究竟是什么依赖于该层?它只是在寻找 stdlib 标头,并假设它会在“/usr/lib”中找到这些标头吗?

如果是这样的话,我不应该告诉它在“C:/gcc/lib”中查找那些头文件吗?

或者 GCC 本身是否依赖 POSIX 库来访问文件系统(以及做其他低级的事情)?如果是这样的话,那么我想知道为什么他们不只是静态链接到他们最喜欢的 windows POSIX 库。当用户可以将这些依赖项直接构建到应用程序中时,为什么还要要求用户设置依赖项?

0 投票
4 回答
10192 浏览

c++ - 检测二进制文件的 GCC 编译时标志

有没有办法找出特定二进制文件编译时使用的 gcc 标志?

0 投票
3 回答
1535 浏览

c++ - 从子类访问受保护的成员:gcc vs msvc

在 Visual C++ 中,我可以执行以下操作:

如果我尝试在 g++ 中编译它,我会得到一个错误。我必须这样做:

我不应该在标准 C++ 中做前者吗?还是 gcc 配置错误导致我出错?

0 投票
4 回答
1862 浏览

linux - linux上的共享库问题

我正在尝试在 linux 系统上编译/链接一个非常旧的软件,但由于某种原因,我无法与安装在我的系统上的共享库链接。

我从链接器收到以下错误:

但是,lib 本身已安装。如果我跑

我得到(除其他外)这个打击:

该库及其链接位于 /usr/lib 顺便说一句。所以没什么特别的。

所以图书馆就在那里,ldconfig 找到了它。什么会导致 ld 在链接时找不到库?正如您可能已经猜到的那样,我对共享库的东西很陌生。

有任何想法吗?

0 投票
4 回答
90479 浏览

c++ - 在 C 代码中使用 C++ 库

我有一个 C++ 库,它提供了各种用于管理数据的类。我有图书馆的源代码。

我想扩展 C++ API 以支持 C 函数调用,以便该库可以同时与 C 代码和 C++ 代码一起使用。

我正在使用 GNU 工具链(gcc、glibc 等),因此语言和架构支持不是问题。

有什么理由说明这在技术上是不可能的吗?

有什么我需要注意的问题吗

是否有与此相关的资源、示例代码和/或文档?


我发现的其他一些事情:

  1. 使用以下内容来包装 C 代码需要使用的 C++ 标头。

  1. 将“真正的”C++ 接口保存在 C 不包含的单独头文件中。在这里考虑PIMPL 原则。在这里使用#ifndef __cplusplus #error东西有助于检测任何疯狂。
  2. 小心 C++ 标识符作为 C 代码中的名称
  3. C 和 C++ 编译器之间大小不同的枚举。如果您使用 GNU 工具链,这可能不是问题,但仍然要小心。
  4. 对于结构,请遵循以下形式,以免 C 混淆。

    /li>
  5. 然后使用指针来传递 C++ 对象,它们只需在 C 中声明为 struct X,其中 X 是 C++ 对象。

所有这一切都是由一位 C++ 天才朋友提供的。

0 投票
3 回答
95275 浏览

assembly - 如何使用 gcc 生成 Intel 语法的汇编代码?

gcc -S选项将以 AT&T 语法生成汇编代码,有没有办法以 Intel 语法生成文件?或者有没有办法在两者之间转换?

0 投票
4 回答
32403 浏览

c++ - 链接上未定义的符号 ___gxx_personality_v0

我一直在用这个命令行构建这个未定义的符号:

test.cpp 很简单,应该可以正常构建。什么是交易?

0 投票
3 回答
19290 浏览

c++ - 对于不遵循 libNAME.so 命名约定的库,如何在没有 -l 或硬编码路径的情况下使用 GCC 链接?

我有一个共享库,我希望使用 GCC 链接可执行文件。共享库的名称不是 libNAME.so 形式的非标准名称,因此我不能使用通常的 -l 选项。(它恰好也是一个 Python 扩展,因此没有“lib”前缀。)

我可以将库文件的路径直接传递给链接命令行,但这会导致库路径被硬编码到可执行文件中。

例如:

有没有办法链接到这个库而不导致路径被硬编码到可执行文件中?

0 投票
2 回答
997 浏览

gcc - gcc 链接器问题

我正在尝试制作一个包装 libpurple 的库(您无需了解有关 libpurple 的任何信息即可在此处提供帮助)。Libpurple 反过来加载“插件”,这些“插件”只是通过 dlopen 之类的东西访问的 .so。这些插件依次回调 libpurple 中的函数。

我可以很好地构建我的库,但是当它调用适当的 libpurple init 函数并且 libpurple 尝试加载插件时,我收到如下错误:

符号查找错误:/usr/local/lib/purple-2/autoaccept.so:未定义符号:purple_user_dir

Purple_user_dir 是 libpurple 中定义的函数。当我构建一个链接到 libpurple 的程序(不是库)时,没有问题。我试过使用 -export-dynamic ,但这似乎没有帮助。这是我的构建命令:

谢谢。