g++ 相关问题

g ++是GNU编译器集合(gcc)的C ++前端。

C++ 中用于匿名联合的默认活动字段

假设我有这样的东西: 结构体a_struct { 整数=0; 联盟 { 长l; 短* sp; }; }; 然后,在代码的其他地方,我声明了一个

回答 1 投票 0

是否有在不同版本的 g++ 编译器中使用 typeid 和 typeinfo 的解决方法?

我的程序使用 typeid() 和 typeinfo 在运行时检查这两种类型是否相同。 以下是一个最小的示例。 库文件 #ifndef _ACANE_LIB_H_ #定义_ACANE_LIB_H_ #包括 我的程序使用 typeid() 和 typeinfo 在运行时检查这两种类型是否相同。 以下是一个最小的示例。 lib.h #ifndef _ACANE_LIB_H_ #define _ACANE_LIB_H_ #include <typeinfo> #include <typeindex> #include <tuple> std::type_index* GetTypeIndex(); const char* GetTypeIndexName(); #endif lib.cpp #include "lib.h" #include <tuple> std::type_index* GetTypeIndex() { return new std::type_index(typeid(std::tuple<int, int>)); } const char* GetTypeIndexName() { return typeid(std::tuple<int, int>).name(); } main.cpp #include <cstdio> #include <cstring> #include <cxxabi.h> #include <string> #include <memory> #include "lib.h" static std::string Demangle(const char* name) { int status = -4; std::unique_ptr<char, void(*)(void*)> res { abi::__cxa_demangle(name, NULL, NULL, &status), std::free }; return (status==0) ? res.get() : name ; } int main() { std::type_index target = std::type_index(typeid(std::tuple<int, int>)); std::type_index* expected = GetTypeIndex();; if (target == *expected) { printf("yes\n"); } else { printf("no\n"); } const char* target_name = typeid(std::tuple<int, int>).name(); const char* expected_name = GetTypeIndexName(); if (!strcmp(target_name, expected_name)) { printf("yes\n"); } else { printf("no\n"); printf("target: %s\nexpected: %s\n", target_name, expected_name); std::string s1 = Demangle(target_name), s2 = Demangle(expected_name); printf("target: %s\nexpected: %s\n", target_name, expected_name); printf("target: %s\nexpected: %s\n", s1.c_str(), s2.c_str()); printf("target: %p\nexpected: %p\n", target_name, expected_name); } } 我将 lib.cpp 编译成静态库,并使用以下命令将 main.cpp 与其链接 build_with_same_compiler.sh #!/bin/bash LIB_CC=/usr/gcc-4.9.4/bin/g++ LIB_AR=/usr/gcc-4.9.4/bin/gcc-ar EXEC_CC=/usr/gcc-4.9.4/bin/g++ CXX_FLAGS="-std=c++11" set -x $LIB_CC -fPIC -c lib.cpp -o lib.o -std=c++11 $CXX_FLAGS $LIB_AR cr libtesttypeinfo.a lib.o $EXEC_CC -c main.cpp -o main.o $CXX_FLAGS $EXEC_CC -o main_same main.o -L. -ltesttypeinfo 它按我的预期工作(显然)。 但是当我用不同的编译器编译静态lib和main.cpp时,它不起作用。 typeid 返回不同的 type_info。 build_with_ different_compiler.sh #!/bin/bash LIB_CC=/usr/gcc-4.9.4/bin/g++ LIB_AR=/usr/gcc-4.9.4/bin/gcc-ar # EXEC_CC=/usr/gcc-12.1/bin/g++ EXEC_CC=/usr/bin/g++-7 CXX_FLAGS="-std=c++11" set -x $LIB_CC -fPIC -c lib.cpp -o lib.o -std=c++11 $CXX_FLAGS $LIB_AR cr libtesttypeinfo.a lib.o $EXEC_CC -c main.cpp -o main.o $CXX_FLAGS $EXEC_CC -o main_diff main.o -L. -ltesttypeinfo 输出是 no no target: St5tupleIJiiEE expected: St5tupleIIiiEE target: St5tupleIJiiEE expected: St5tupleIIiiEE target: std::tuple<int, int> expected: std::tuple<int, int> target: 0x5580ab7a36b8 expected: 0x5580ab7a374d 在 g++4.9.4 中,std::tuple<int, int> 的名称是 St5tupleIJiiEE,而在 g++7.5 中,它是 St5tupleIIiiEE。 由于 type_info 是实现定义的,是否有任何解决方法和稳定的方法来在运行时检查类型? 还有一个问题是,C++17中的std::any也使用了type_info,std::any如何保证不同版本的编译器之间的type_info始终相同? 有没有任何解决方法和稳定的方法来在运行时检查类型? 不。事实上,对于相同的类型,typeid、typeinfo,尤其是 name() 每次运行相同的程序时都可以返回不同的值。 对于给定类型,您将在同一程序运行期间获得一致的结果。 下次程序运行时,记录会被清除。所有赌注都失败了。 还有一个问题是,C++17中的std::any也使用了type_info,那么std::any如何保证不同版本的编译器之间的type_info始终相同? 事实并非如此。它不需要。 std::any 比较的都是在同一程序运行期间创建的对象类型。这保证是一致的。 std::any 中没有任何类型的工具可以将特定对象的类型保存在某处,然后在后续程序运行期间将其取出以进行比较。

回答 1 投票 0

gcc:-L 和 -l 选项之间的区别以及如何提供库的完整路径

我是 makefile 的新手;所以,如果我的问题是微不足道的,请接受我的道歉。 问题 1:-L 和 -l 选项有什么区别。 问题 2:你如何提供完整的路径......

g++
回答 2 投票 0

为什么 gcc 4.1 + gcov 报告 100% 的分支覆盖率而更新的(4.4、4.6、4.8)报告“p = new class;”的 50%线?

当 gcc 4.1(使用 gcov)下一行: p = 新类别; 被报告为 100% 分支覆盖率 <-- THIS IS OK for me. Why using gcc 4.4 and higher same line is reportted as: [+ -] p = new Class; (50% b...

回答 2 投票 0

是否有可能比我发现的像 openMP 这样的并行化更好地改善处理时间?

我想用 openMP 优化递归。所以,我从这个问题开始: 使用 openmp 并行化此递归的最佳方法 在寻找优化递归函数时,我首先感兴趣的是......

回答 3 投票 0

g++ 链接外部库时没有那个文件或目录

我正在在线关注 LearnCPP 教程,并且想知道如何安装 plog。据我了解,plog 是一个头文件库,仅将其物理添加到我正在工作的目录中就足够了......

回答 0 投票 0

如何判断头文件从哪里包含?

我怎么知道 g++ 在哪里可以找到包含文件?基本上如果我 #包括 g++ 将扫描搜索路径,使用任何包含选项来添加或更改路径。但是,在...

回答 6 投票 0

C++变量名中的北欧字符[重复]

是否有可能在类名和变量名中使用北欧字母表中的字符在 C++ 中进行编程? (特别是:æ、ø 和 å)。 例子: 自动 fø = 2; 我正在使用 GCC > 6,它...

回答 1 投票 0

C++ 编译器不支持 C++11(例如 std::unique_ptr)。构建 OpenWRT

我在这里和这里使用说明在 ubuntu 中构建 OpenWRT 但我得到: make[4]: 进入目录'~/openwrt/build_dir/host/cmake-3.11.1/Bootstrap.cmk' make[4]: 'cmake' 是最新的。 米...

回答 5 投票 0

to_string 不是 std 的成员,g++ (mingw) 说

我正在制作一个小的词汇记忆程序,其中单词会随机闪现给我以了解含义。正如 Bjarne Stroustroup 告诉我们的那样,我想使用标准 C++ 库,但我有

回答 14 投票 0

<iomanip> 生成编译器错误 stray '\#UTF'

我正在使用 Code::Blocks 和 Cygwin (GCC 5.4.0)。 我的代码编译并运行良好,直到我: #include (试图访问 cout << setprecision(int) ). iomanip generates these

回答 0 投票 0

如何使用 g++ 成功编译任何东西,启用模块?

我有以下文件: 文件Testing2.cpp #包括 #包括 诠释主要(){ std::string ss = "aaaa"; ss += "aa"; 标准::计算<< ...

回答 1 投票 0

使用“g++”编译 .cpp 文件

我是 Ubuntu 用户。 g++ file.cpp -o file 和 g++ -c file.cpp 有什么区别? 我知道 g++ -c file.cpp 创建了一个目标文件 file.o。 但是 g++ file.cpp -o 文件呢? 我有...

回答 3 投票 0

CMake:针对 libgcc 和 libstdc++ 静态链接到共享库

问题: 在我的 Ubuntu 16.04 安装中,我无法使用 CMake 和 GCC4.9 将 glibcc/glibc++ 链接到共享库。 附加条件: 加载共享库给出了 p...

回答 2 投票 0

C++ 程序未运行

使用 g++ 编译,我的 tasks.json 文件(使用 VScode)是: { “版本”:“2.0.0”, “任务”: [ { “类型”:“cppbuild”, ...

回答 0 投票 0

SFML c++ 程序在运行时抛出错误“找不到入口点”

我最近开始学习c++,现在对c++有些熟悉了。但这是我的第一个 SFML 程序,我没有任何使用第三方库的经验。我制作了我的第一个 SFML 程序......

回答 1 投票 0

如何在 Winsows 10 中将 png.h 与 g++ 链接?

我必须在我的项目中使用 pngwriter 库。我从 Github 下载了 pngwriter,并将 .cpp 和 .h 作为组合源文件作为 .hpp 文件包含在我的项目中。 # 包含 "pngwriter...

回答 0 投票 0

CMAKE_C_COMPILER 不是现有编译器工具的完整路径

我最近探索了distcc,但无法使其工作。所以我 sudo apt-get 删除 distcc 之后,我得到了错误 ==>处理catkin包:'gencpp' ==> 使用环境构建:'/opt/ros/

回答 5 投票 0

模板类之前得到预期的主表达式

我正在学习使用模板类 我创建了一个名为 Matrix 的类 模板 类矩阵{ 私人的: 我是 m_rowstart; 我是 m_columnstart; 小...

回答 0 投票 0

为什么这个 type_traits 代码给我一个整数到指针转换警告?

在不赘述的情况下,我创建了一个可变参数模板函数,它根据模板参数的类型做不同的事情。我将实现简化为重新...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.