草庐IT

linux - 强制 GNU 链接器生成 32 位 ELF 可执行文件

您好,我目前正在为我正在编写的编译器生成x86程序集,但在链接我的64位VM上的文件时遇到了一些问题(汇编代码是32位)。我能够用这个命令很好地组装目标文件:as--32mult.S-omult.o但我似乎找不到任何使ld生成32位ELF文件的选项:ldmult.o-omult任何帮助都会很棒。 最佳答案 ldmult.o-omultld-melf_i386mult.o-omult您可以获得可用架构的列表:ld-V示例输出:GNUld(GNUBinutilsforUbuntu)2.24Supportedemulations:elf_

c++ - 用于分析和减少我的应用程序编译时间的 GNU 工具

我正在使用SUSE10(64位)/AIX(5.1)和HPI64(11.3)来编译我的应用程序。只是为了提供一些背景知识,我的应用程序有大约200KLOC(2Lacs)行代码(没有模板)。它是纯C++代码。根据测量结果,我看到编译时间从45分钟(SUSE)到大约75分钟(AIX)。问题一:这个时间正常吗(可以接受)?问题2:我想重新设计代码安排,减少编译时间。是否有任何GNU工具可以帮助我做到这一点?附言:一种。stackoverflow中的大部分问题都与VisualStudio有关,因此我不得不发布一个单独的问题。b.我用的是gcc4.1.2版本。C。另一个信息(可能有用)是代码分布在

c++ - 使用多线程在 GNU C 中使用 Write Function 是否安全

将多个线程的函数调用写入同一个套接字安全吗?我们想在它们之间添加同步吗?它会引起诸如此类的问题吗应用程序从网络层到应用层的写入/读取延迟我们正在使用GNUC++库LinuxRedhat环境上的GCC4这是一个服务器端进程,其中服务器和客户端之间只有1个套接字连接服务器和客户端位于2台不同的机器上数据从服务器发送到客户端客户端到服务器问题1-当服务器向客户端发送数据时(多个线程通过同一个套接字向客户端写入数据)但是从某些线程写入的数据没有进入客户端,它甚至没有进入网络层同一台机器的(Tcpdump没有该数据)问题2-当客户端向服务器发送数据时,客户端发送的数据显示在服务器的TCPdump

c++ - GNU/G++ 4.9(2.95.3 之前的版本)的 C++11 中的 string_char_traits<char>

我有一些遗留的C++代码(用于使用GNUg++2.95.3进行编译)具有以下声明std::basic_string,malloc_alloc>x;头文件是#include现在,我正在迁移到GUg++4.9,但出现此错误:1.std/bastring.h未找到2.当我改变#include作为#include,我收到以下错误:error:'string_char_traits'wasnotdeclaredinthisscopestd::basic_string,malloc_alloc>x;error:templateargument2isinvalidstd::basic_string,

c++ - 如何在 Solaris 8 SPARC 上启用 _GLIBCXX_USE_C99?

我已经为Solaris8sparc构建了gcc4.6.1。我正在编译一些使用boost::lexical_cast(boost1.48)的代码,但出现此错误:boost/math/special_functions/sign.hpp:Infunction'intboost::math::detail::signbit_impl(T,constboost::math::detail::native_tag&)'error:'signbit'isnotamemberof'std'(对于fpclassify、isfinite、isnormal、isinf、isnan也有类似的错误)我查看了c

c++ - GNU Fortran 和 C 互操作性

我有一个大型的混合C/Fortran代码库,目前使用英特尔工具在Windows上编译。我被要求将它移植到Linux上的GNU工具。或多或少是随机的,我选择了4.8版。如果从Fortran调用C函数,互操作性通常如下所示://Ccode:voidPRINTSTR(char*str,size_tlen){for(intii=0;ii英特尔Fortran编译器始终生成大写符号,因此可以正常工作。但是GNUFortran编译器总是生成小写符号,因此存在链接器错误。GNUFortran编译器过去有一个名为-fcase-upper的选项,它可以生成大写符号,但似乎这对每个人来说都太可配置了,它已被

c++ - unordered_multimap 在 gnu++11 和 c++0x 中的不同行为

我在不同的编译器上编译了以下程序,并得到了不同的行为,来源:#include#include#includeusingnamespacestd;std::unordered_mapmymap;std::unordered_multimapmymultimap;intmain(){DoAddItem();std::coutfirstsecond;std::coutfirstsecond;std::coutmypair[100];intidx;std::strings1;std::strings2;for(idx=0;idx在RedHatLinux中用g++4.4.6编译如下:g++--s

c++ - 可移植 C++ 原子交换(Windows - GNU/Linux - MacOSX)

是否有免费的可移植(Windows、GNU/Linux和MacOSX)库提供无锁原子交换功能?如果没有,将如何针对这些平台中的每一个实现?(使用VC++或g++的x86)谢谢 最佳答案 有一个lock-free图书馆待审boost.另外,如果您深入研究boostsmartpointers的来源在库中,您会发现为多个平台内联的原子操作。另一个-英特尔ThreadingBuildingBlocks实现了atomic模板。 关于c++-可移植C++原子交换(Windows-GNU/Linux-

c++ - 是否有用于 C(C99 或其他)的标准化和常用库,因为 STL 用于 C++?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:ContainerClass/LibraryforC我预计我会被迫在我的C程序中使用vector、列表和集合。我应该从头开始发明这些实体,还是有某种C的标准库,就像C++的STL一样?

c++ - 如何检索 C99 可变参数宏的最后一个参数?

VisualStudio针对失败的static_assert的错误消息完全由错误代码和static_assert的第二个参数组成,没有任何其他消息表明它是静态断言失败。我想做一个宏来解决这个问题。例如,作为第一次尝试:#defineSTATIC_ASSERT(x)static_assert(x,"staticassertionfailed:"#x)您遇到的第一个问题是C预处理器不理解作为封闭的定界符,这会导致模板出现语法错误。以下内容变为非法:templateautoSafeMultiply(Tx,Uy)->decltype(x*y){STATIC_ASSERT(std::is_sam