草庐IT

c++ - 从 Visual Studio 2012 编译到 g++?

我有一个在VisualStudio2012中编译的c++程序。它包含boost库。现在,我想使用g++编译器对其进行编译。我必须注意哪些事项?最有可能在随机位置悄悄破坏我的代码的事情。例如,我一直假设long是4个字节,而g++将其视为8个字节。仅此一项,我就需要进行一些更改。要使用什么版本的gcc,4.7.3、4.6.4或4.8.2? 最佳答案 如果您在不使用特定库的情况下编写了有效且良好的C++代码,您应该什么都不知道。 关于c++-从VisualStudio2012编译到g++?,

c++ - g++ 同时链接静态库和非静态库

我有一个makefile项目,其中包含几个不同的库。其中之一是boost库,我静态链接它以使我的程序可移植。这是我的makefile命令的样子:g++-O0-gtest.cpptestObject.o-pthread-I/home/user/devel/lmx-sdk-4.7.1/include/-L/home/user/devel/lmx-sdk-4.7.1/linux_x64-llmxclient-lrt-ldl-lboost_filesystem-lboost_system-static-static-libgcc-o$@我还将lmx-sdk库链接到我的项目,以便使用许可功能;然

c++ - g++ 编译器是否以不同方式查看字符串数组和整数数组?

我似乎无法获得在函数内部声明的字符串数组。voidfoo(stringarr[],intarrSize){stringtemp[arrSize];//Resultsinerrorshownbelowinttemp2[arrSize];//Compilesfine}我收到一个编译时错误,指出:非POD元素类型“string”的可变长度数组(又名“basic_string,分配器>”)...[a...我尝试使用voidfoo(stringarr[],constintarrSize);将arrSize参数声明为常量,甚至在函数内部声明一个新的常量整数并将其初始化为arrSize但两者仍然导致

c++ - 所有 g++ 版本的 delete[] 可能存在错误或未定义此行为?

这个问题在这里已经有了答案:Whyisitundefinedbehaviortodelete[]anarrayofderivedobjectsviaabasepointer?(5个答案)关闭4年前。我有这段代码,它给了我3个或更多元素的段错误。我在vs和clang上测试并工作(循环结束和二进制结束没有错误)。我做错了什么?或者它是一个g++错误?如果我更改delete[]线到delete[]static_cast(a);它也适用于g++。但是,在实际情况下,我不知道真正的类型,所以我不能转换成任何东西。classA{public:virtual~A(){}virtualintx()=0

c++ - g++ 链接器错误:获取 std::hash 的 undefined reference 错误

我在我的代码中使用了TR1实现的unordered_map,链接器给出了我什至无法破译的奇怪错误:BPCFG.o:Infunction`std::__detail::_Hash_code_base,std::_Select1st>,eqDottedRule,std::hash,std::__detail::_Mod_range_hashing,std::__detail::_Default_ranged_hash,false>::_M_hash_code(DottedRuleconst&)const':BPCFG.cpp:(.text._ZNKSt8__detail15_Hash_co

c++ - 在 g++ 中编译 Windows C++ 程序

我正在尝试用g++编译一个WindowsC++程序。这就是我得到的。/usr/include/c++/4.4/backward/backward_warning.h:28:2:warning:#warningThisfileincludesatleastonedeprecatedorantiquatedheaderwhichmayberemovedwithoutfurthernoticeatafuturedate.Pleaseuseanon-deprecatedinterfacewithequivalentfunctionalityinstead.Foralistingofreplac

c++ - 将位设置为 double 并使用 g++ 的优化标志进行编译

我正在尝试将位设置为double(IEEE标准754)。说我想“构建”一个3,我会设置双浮点表示的第51位和第62位,这样我得到二进制1.1*2,十进制为3。我写了这个简单的main:intmain(){doublet;uint64_t*i=reinterpret_cast(&t);uint64_tone=1;*i=((one这个的输出将是88883当使用g++4.3编译并且没有优化时。但是,如果我添加-O2或-O3优化标志,我会得到一个奇怪的行为。也就是说,如果我让main保持原样,我会得到相同的输出。但是,如果我删除输出4sizeof的行,那么我将得到输出0没有sizeof输出的未

c++ - operator>> 适用于 Visual C++ 2010 但不适用于 Linux 上的 G++

我有以下问题:我的代码适用于VisualC++2010,但是当我在Linux上编译它时,它被编译了,但是有些东西不起作用:这是我的Vector输入operator>>:istream&operator>>(istream&in,Vector&x){chara;in.sync();a=in.get();//getsthe'['for(inti=0;i>x._vector[i];if((i+1)!=x._n)a=in.get();//getsthe','}in>>a;//getsthe']'returnin;}_vector指向一个Complex数组,Complex的operator>>工

c++ - g++ 项目编译与 boost 单元测试

我正在尝试在Linux上编译单元测试(boost),但编译器报错。有人可以检查我的命令吗?g++-oUTest../UTest/UT1.cpp../UTest/UT2.cpp-lboost_system-lboost_thread-lboost_unit_test_framework错误/usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/crt1.o:Infunction`_start':(.text+0x18):undefinedreferenceto`main'我从g++命令中删除了main(),因为在使用boostuni

c++ - g++ 4.9 拒绝 C++14 中的有效聚合初始化

考虑这段代码:structS{intx;doubley=1.1;};intmain(){Ss={0};}根据C++14标准,§8.5.1/7Iftherearefewerinitializer-clausesinthelistthantherearemembersintheaggregate,theneachmembernotexplicitlyinitializedshallbeinitializedfromitsbrace-or-equal-initializeror,ifthereisnobrace-or-equal-initializer,fromanemptyinitiali