g ++是GNU编译器集合(gcc)的C ++前端。
为什么 g++ 会生成两个具有不同名称修饰的构造函数? [重复]
测试用例如下: // 测试.cpp X类{ 民众: X(); }; X::X() { } 无效 foo() { ××; } 编译它并读取目标文件中的符号,如下所示: [root@localhost tmp]# g++ -c 测试...
测试环境: CentOS 7.0 g++ 4.8.2 Arch Linux g++ 4.9.0 20140604(预发行版) Arch Linux g++ 4.9.1 编译命令案例: 通过:g++ -Wall t.cpp 失败:g++ -Wall -O2 t.cpp 通过:g++ -Wall -O...
我主要用Python编码,但现在我想开始用C++编码。在Python中,你可以 导入 glfw # 示例 我想在 C++ 中做同样的事情。我知道我可以这样做: #包括 但是...
我主要用Python编码,但现在我想开始用C++编码。在Python中,你可以 导入 glfw # 示例 我想在 C++ 中做同样的事情。我知道我可以这样做: #包括 但是...
在 Debian 12 上使用 GNU ld 链接 libvulkan(未定义参考)的问题
我想用Vulkan学习编程。我的第一步是枚举系统上可用的 Vulkan 扩展数量。所以我写了这个简单的代码: #包括 #包括 我想用 Vulkan 学习编程。我的第一步是枚举系统上可用的 Vulkan 扩展数量。所以我写了这个简单的代码: #include <iostream> #include <vulkan/vulkan.hpp> int main(int argc, char *argv[]) { VkResult ret; unsigned int propertyCount; ret = vkEnumerateInstanceExtensionProperties(NULL, &propertyCount, NULL); if (ret != VK_SUCCESS) return 1; std::cout << "Vulkan: Extension Count: " << propertyCount << std::endl; return 0; } 当我尝试编译和链接代码时,出现 undefined reference 错误: $ g++ -lvulkan -o vkExtension vkExtension.cpp /usr/bin/ld: /tmp/user/1000/ccgB9M9N.o: in function `main': vkExtension.cpp:(.text+0xc99): undefined reference to `vkEnumerateInstanceExtensionProperties' collect2: error: ld returned 1 exit status $ 虽然 libvulkan 安装在我的系统上(Debian 12): $ cd /usr/lib/x86_64-linux-gnu $ ls -la | grep libvulkan -rw-r--r-- 1 root root 8575696 Mar 22 2023 libvulkan_intel_hasvk.so -rw-r--r-- 1 root root 11115728 Mar 22 2023 libvulkan_intel.so -rw-r--r-- 1 root root 6918024 Mar 22 2023 libvulkan_lvp.so -rw-r--r-- 1 root root 8711344 Mar 22 2023 libvulkan_radeon.so lrwxrwxrwx 1 root root 14 Feb 6 2023 libvulkan.so -> libvulkan.so.1 lrwxrwxrwx 1 root root 20 Feb 6 2023 libvulkan.so.1 -> libvulkan.so.1.3.239 -rw-r--r-- 1 root root 457224 Feb 6 2023 libvulkan.so.1.3.239 $ 我也检查了库本身是否缺少功能(符号),但应该在已安装的库中可用。命令 nm 不会列出任何符号,因为库已被删除。所以我用了readelf: $ readelf -s --wide libvulkan.so.1.3.239 | grep vkEnumerateInstance 136: 0000000000034850 687 FUNC GLOBAL DEFAULT 12 vkEnumerateInstanceExtensionProperties 170: 0000000000034b00 639 FUNC GLOBAL DEFAULT 12 vkEnumerateInstanceLayerProperties 283: 0000000000034d80 709 FUNC GLOBAL DEFAULT 12 vkEnumerateInstanceVersion $ 我还检查了链接器(GNU ld)的默认库搜索路径,但路径是正确的。 缺少什么? (SO上也有类似的问题。但不幸的是没有答案。) 更新 似乎问题与GNU GCC/ld相关。尝试使用 clang++/LLVM 构建代码,成功了: $ clang++ -Wall -Wextra -lvulkan -o vkExtension vkExtension.cpp vkExtension.cpp:5:14: warning: unused parameter 'argc' [-Wunused-parameter] int main(int argc, char *argv[]) ^ vkExtension.cpp:5:26: warning: unused parameter 'argv' [-Wunused-parameter] int main(int argc, char *argv[]) ^ 2 warnings generated. $ ./vkExtension Vulkan: Extension Count: 20 $ 也更新了问题标题。 我已经解决了这个问题。这是我的第 8 层(使用)问题。 链接参数的库必须在带有GCC/G++的源之后,当然,不能在之前: $ g++ -o vkExtension vkExtension.cpp -lvulkan 完全忘记了GCC/G++的这种行为。抱歉,其他 SO 用户浪费了您的时间。
CMake、g++:设置 CXX 标志 -02 但 -03 仍然存在?
我想向发布模式添加特定的编译器 cxx 标志。我在另一个线程中读到 -O2 是发布配置的好标志 设置(CMAKE_CXX_FLAGS_RELEASE“${
我目前正在移植一个库(不是我自己编写的,我“只是”移植它)以使用 MinGW 编译器。该库是真正的重量级库,拥有各种C++“黑魔法”(多重继承,
我认为我已经正确安装了SDL,但我找不到像 import Pygamein python 这样的检查方法。我使用的是 Ubuntu 13.04。这是我的 C++ 代码中的标头#include“SDL/SDL.h”。当我运行 g++ 时...
我想使用 gcc 的 gprof 逐行分析。但是在编译我的程序、运行它并执行 gprof -l binary_name 之后,我收到如下消息: gprof:有人算错了:ltab.len=9403
我在 Ubuntu 12.04 LTS 上运行 CodeLite 5.2(从 13.04 降级,目前存在一些稳定性问题)。 我刚刚安装了 GCC 4.8 编译器,这不是默认的 GCC 编译器...
无法在 Windows 上使用 g++ 编译带有 SFML 的 *.cpp 文件
我正在尝试编译 *.cpp 文件: #包括 使用命名空间 sf; int main() { RenderWindow 窗口(VideoMode(400, 400), L"新项目", Style::Default)...
在什么情况下你到底需要 -all_load 标志? 可以说我有类似的东西 g++ source.cpp -o 测试 libA.a libB.a libC.a 据我回忆,是否有对
如何从生成的二进制文件中查看哪些静态库用于 gcc/g++ 编译?
上下文:我正在使用 Linux 工具链(包括 g++、其他构建工具、库、标头等)来使用静态链接库构建我的代码。我想确保我只使用库/标头...
今天我发现了一个有趣的案例,双 libstdc++ ABI 影响库的兼容性。 长话短说,我有两个内部都使用 std::regex 的库。一个是用...构建的
在 Macos 上使用 g++ 和 clang 找不到 iostream
我正在尝试从源代码编译StegHide,但收到一条错误消息,说找不到iostream。 我编写了以下程序并使用 -std 设置为我的系统的所有标准进行编译...
在 godbolt 中使用 -O3 和 -fno-inline 编译的代码示例:https://godbolt.org/z/4rvxccsns 模板 T numbbo(T r, 无符号 s) { 返回 10.0 / (static_cast(s) /
我正在开发一个C++项目,需要在Intel SBC(单板计算机)上运行。该开发是在英特尔的台式机上进行的。是否建议在办公桌上编译代码...
我有一个实用宏,用于将给定的宏广播到所有参数: #定义 NUM_ARGS_IMPL( \ _1、_2、_3、_4、_5、_6、_7、_8、_9、\ //...许多占位符 _90,_91,_92,_93,_94,_95,_96,...
是编译bug吗?在 constexpr 函数中访问 union 的非活动成员会导致编译时评估出现编译错误
当我使用 constexpr 函数时,我遇到了以下问题。 我知道访问联合体的非活动成员是未定义的行为。但这一规则有一个例外。 根据C+...
是编译bug吗?在 constepr 函数中访问 union 的非活动成员会导致编译时评估出现编译错误
当我使用 constexpr 函数时,我遇到了以下问题。 我知道访问联合体的非活动成员是未定义的行为。但这一规则有一个例外。 根据 C++23