Articles of gcc

fprintf,错误:格式不是string文字,也没有格式参数[-Werror = format-security

当我尝试在Ubuntu上编译fprintf(stderr,Usage) ,我得到这个错误: error: format not a string literal and no format arguments [-Werror=format-security 但是当我在编译成功的其他Linux发行版(RedHat,Fedora,SUSE)上编译时。 任何人有一个想法?

如何使用crosstool-NG来改变GCC的“加拿大十字”汇编的主机types

我已经安装了crosstool-NG,并在主机+构build的x86机器上构build了GCC,该机器的目标是arm-unknown-linux-gnueabi。 然后,我使用arm-unknown-linux-gnueabi-gcc编译在我的ARM板上运行良好的程序。 我现在想要构buildGCC,将ARM托pipe在ARM上。 我相信这个术语是 build=i486-pc-linux-gnu target=arm-unknown-linux-gnueabi-gcc host=arm-unknown-linux-gnueabi-gcc 我该怎么做呢? 我是否运行./configure进行crosstool-NG传递–host = arm-unknown-linux-gnueabi-gcc? 或者我更改CC / etc的环境variables?

在gcc内联汇编中调用一个函数

说,我想在gcc的内联汇编中调用带有以下签名的函数。 我怎样才能做到这一点? int some_function( void * arg );

由于符号与abi :: cxx11链接问题?

我们最近因为GCC 5.1,libstdc ++和Dual ABI而发现了一个报告。 看来Clang并不知道GCC内联命名空间的变化 ,所以它根据一组命名空间或符号生成代码,而GCC使用另一组命名空间或符号。 在链接时,由于缺less符号而出现问题。 如果我正确parsingDual ABI页面,它看起来像在_GLIBCXX_USE_CXX11_ABI和abi::cxx11上旋转,还有一些额外的困难。 在GCC5和C ++ 11 ABI以及GCC-5.1和两个C ++ ABI的案例上,红帽公司的博客上提供了更多的阅读材料。 下面是来自Ubuntu 15的机器。 机器提供GCC 5.2.1。 $ cat test.cxx #include <string> std::string foo __attribute__ ((visibility ("default"))); std::string bar __attribute__ ((visibility ("default"))); $ g++ -g3 -O2 -shared test.cxx -o test.so $ nm test.so | grep _Z3 … 0000201c B _Z3barB5cxx11 00002034 B _Z3fooB5cxx11 […]

make -j 8 g ++:内部编译错误:kill(程序cc1plus)

当我在Ubuntu12.04上部署Apache Mesos时,我按照官方文档,在步骤“make -j 8”我在控制台中得到这个错误: g++: internal compiler error: Killed (program cc1plus) Please submit a full bug report, with preprocessed source if appropriate. See <file:///usr/share/doc/gcc-4.9/README.Bugs> for instructions. make[2]: *** [slave/containerizer/mesos/libmesos_no_3rdparty_la-containerizer.lo] Error 1 make[2]: *** Waiting for unfinished jobs…. mv -f log/.deps/liblog_la-log.Tpo log/.deps/liblog_la-log.Plo mv -f slave/containerizer/.deps/libmesos_no_3rdparty_la-docker.Tpo slave/containerizer/.deps/libmesos_no_3rdparty_la-docker.Plo mv -f log/.deps/liblog_la-consensus.Tpo log/.deps/liblog_la-consensus.Plo mv -f slave/containerizer/.deps/libmesos_no_3rdparty_la-external_containerizer.Tpo slave/containerizer/.deps/libmesos_no_3rdparty_la-external_containerizer.Plo mv -f […]

Linux上的链接器错误:“undefined reference to”

我能够没有问题地共享一个共享库。 我创build了libcbitcoin.so(没有错误),并尝试与可执行文件以及OpenSSL库进行链接。 我使用这个命令: gcc -L/media/sf_BitEagle_Projects/cbitcoin/build/bin -lcbitcoin \ -Wl-rpath,/media/sf_BitEagle_Projects/cbitcoin/build/bin -lssl -lcrypto \ -L/usr/local/ssl/lib/ -o /media/sf_BitEagle_Projects/cbitcoin/build/bin/testCBAddress \ /media/sf_BitEagle_Projects/cbitcoin/build/obj/testCBAddress.o \ /media/sf_BitEagle_Projects/cbitcoin/build/obj/CBOpenSSLCrypto.o bin目录是库的位置。 obj目录有我想链接到一个可执行文件的目标文件。 在命令中,我使用了-L,-l和-rpath选项,我认为这些选项在linux中是需要的。 看来我错了,因为我得到如下错误: /media/sf_BitEagle_Projects/cbitcoin/test/testCBAddress.c:40: undefined reference to `CBNewByteArrayFromString' CBNewByteArrayFromString在库中find。 由于某种原因,它没有被链接。 OpenSSL也是: /media/sf_BitEagle_Projects/cbitcoin/dependencies/crypto/CBOpenSSLCrypto.c:37: undefined reference to `SHA1' 我如何获得链接工作? GCC版本:gcc(Ubuntu / Linaro 4.6.3-1ubuntu5)4.6.3 在Linux Mint 13上 谢谢。

在Linux GCC中没有理由“初始化元素不是常量”错误,编译C

我把我的main.c文件在Mac OS X中用gcc -std = c1x -c main.c进行编译,并且没有任何错误。 然后我在LinuxMint和Raspberry Pi上做了完全相同的事情,在这两种情况下,它给了我关于“初始化器元素不是常量”的错误。 有关代码的问题行的一个例子: //STATIC GLOBAL CONSTANTS const unsigned long long LATITUDE = (long) 3600000; const unsigned long long LONGITUDE = (long) 1810000; const unsigned long long MAX_COORDINATES_NUMBER = (LATITUDE-1) + LATITUDE*(LONGITUDE-1); //compiler error: initializer element is not constant 它应该让我做算术,对吧? 我可以用实际的数字代替它,它会起作用,但是会变得混乱。 而且,无论如何,它在我的Mac上工作正常。 在GCC中有一些选项,我必须在Linux上指定(除了-std = c1x,你也不需要在Mac上)?

为什么指定的初始化程序没有在g ++中实现

为什么要支持指定的初始化程序没有被添加到g ++中有什么具体的原因吗? 是C99标准迟到的原因,g ++是早期开发的,后来人们不关心这个问题,还是在C ++语法中实现指定的初始化方法有一些固有的困难?

Eclipse,Ubuntu中未解决的<iostream>

是的,这又是一个问题 不知何故,我无法解决这个问题。 信不信由你,我有Eclipse的经验,但只为Java开发。 我已经使用vi编写了C ++程序,但是没有使用Eclipse。 我已经安装了: Ubuntu 12.04 Eclipse 3.7.2 GCC 4.6.3 Eclipse CDT 8.0.2 我创build了一个空的Makefile项目,并select了Linux GNU Toolchain: 我得到标准的Unresolved inclusion <iostream>错误,我有一些对项目中的各种“包含”目录的引用: 我注意到,虽然我的“path和符号”设置为GNU C包含各种path,相同的设置为GNU C ++是空的: 此外,我有我的C / C ++构build设置下的“GNU精灵分析器”: 我在这里做错了什么? 干杯 编辑: 这里是我正在工作的一个项目的构buildpath的更新照片:

如何自我dlopen一个可执行的二进制文件

我写了一个程序来打开自己 void hello() { printf("hello world\n"); } int main(int argc, char **argv) { char *buf="hello"; void *hndl = dlopen(argv[0], RTLD_LAZY); void (*fptr)(void) = dlsym(hndl, buf); if (fptr != NULL) fptr(); dlclose(hndl); } 但我得到“segemention故障”的错误我testing了这个程序与.so库,它的工作原理,但不能让它与自己的工作