草庐IT

c++ - 在带有 g++ 的 Linux 上使用 SDL2?

#include"SDL2/SDL.h"intmain(intargc,char*args[]){SDL_Init(SDL_INIT_EVERYTHING);SDL_QUIT();return0;}我已经通过debian存储库安装了SDL2,并且正在运行g++-otest.cppa.out-lSDL2我遇到了很多错误:a.out:(.rodata+0x0):multipledefinitionof`_IO_stdin_used'/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crt1.o:(.rodata.cst4

linux - 为什么使用 g++ 而不是 gcc 来编译 *.cc 文件?

我编译了一个使用g++而不是gcc的库。一开始我以为源代码是用C++写的,后来发现*.cc文件里没有任何C++代码。为了证实这一点,我用gcc替换了原始makefile中的g++。而且我仍然得到了正确的程序。谁能解释一下?我不是第一次遇到这种情况。 最佳答案 这取决于您在makefile中究竟更改了什么。gcc/g++实际上只是一个前端驱动程序,它根据您提供的选项调用实际的编译器和/或链接器。如果您将编译器调用为gcc:它将根据文件扩展名(.c或.cc/.cpp编译为C或C++/);它将链接为C,即它不会引入C++库,除非您为此专门

linux - 为什么使用 g++ 而不是 gcc 来编译 *.cc 文件?

我编译了一个使用g++而不是gcc的库。一开始我以为源代码是用C++写的,后来发现*.cc文件里没有任何C++代码。为了证实这一点,我用gcc替换了原始makefile中的g++。而且我仍然得到了正确的程序。谁能解释一下?我不是第一次遇到这种情况。 最佳答案 这取决于您在makefile中究竟更改了什么。gcc/g++实际上只是一个前端驱动程序,它根据您提供的选项调用实际的编译器和/或链接器。如果您将编译器调用为gcc:它将根据文件扩展名(.c或.cc/.cpp编译为C或C++/);它将链接为C,即它不会引入C++库,除非您为此专门

linux - g++ 抛出文件无法识别 : File format not recognized error

使用命令g++-otest-L出现以下错误。-lpqlibpq.so:filenotrecognized:Fileformatnotrecognized#filelibpq.solibpq.so:ELF64-bitLSBsharedobject,x86-64,version1(SYSV),notstrippedgcc版本4.1.220070115(SUSELinux)如果我尝试使用-ldbodbc而不是-lpq,我会遇到同样的错误。请注意,test.c是一个简单的helloworld程序。提前致谢。 最佳答案 file/usr/bi

linux - g++ 抛出文件无法识别 : File format not recognized error

使用命令g++-otest-L出现以下错误。-lpqlibpq.so:filenotrecognized:Fileformatnotrecognized#filelibpq.solibpq.so:ELF64-bitLSBsharedobject,x86-64,version1(SYSV),notstrippedgcc版本4.1.220070115(SUSELinux)如果我尝试使用-ldbodbc而不是-lpq,我会遇到同样的错误。请注意,test.c是一个简单的helloworld程序。提前致谢。 最佳答案 file/usr/bi

linux g++ 将 64 位共享库代码链接到静态库

上下文:我可以创建一个链接到静态库的共享对象库,在32位Linux上没有任何问题。当我在64位Linux上尝试相同的构建时,我看到了这个链接器错误:创建共享对象时不能使用针对“局部符号”的重定位R_X86_64_32S;重新编译-fPIC这个错误在网络上很常见。解决方案是使用位置无关代码(-fPIC)编译静态链接库。我不明白的是为什么32位版本不需要这样做。有人可以帮忙吗? 最佳答案 如果您的目标模块将在共享库中使用,则始终需要“位置独立代码”。它高度依赖于平台,并且会产生一些开销。您必须在amd64而不是x386上明确指定它的原因

linux g++ 将 64 位共享库代码链接到静态库

上下文:我可以创建一个链接到静态库的共享对象库,在32位Linux上没有任何问题。当我在64位Linux上尝试相同的构建时,我看到了这个链接器错误:创建共享对象时不能使用针对“局部符号”的重定位R_X86_64_32S;重新编译-fPIC这个错误在网络上很常见。解决方案是使用位置无关代码(-fPIC)编译静态链接库。我不明白的是为什么32位版本不需要这样做。有人可以帮忙吗? 最佳答案 如果您的目标模块将在共享库中使用,则始终需要“位置独立代码”。它高度依赖于平台,并且会产生一些开销。您必须在amd64而不是x386上明确指定它的原因

linux - 是否可以在没有 root 的情况下在 CentOS 上安装 g++?

我有一台装有CentOS5.8的核心i7机器,我通过SSH连接到它并用于运行模拟。不幸的是它只有gcc版本4.1.2。这似乎产生的程序比我在较慢的笔记本电脑上使用MicrosoftVisualExpressc++2010进行优化编译时得到的程序慢得多。我尝试了各种g++优化标志,但它们没有太大帮助,所以我想我需要升级gcc。我的机器上没有根目录,所以看起来我必须将它安装在我的主目录中。这是否可行?如果可行,是否需要任何具体说明才能做到这一点?谢谢 最佳答案 您可以使用EasyBuild,它可以让您非常轻松地安装特定的GCC版本而无需

linux - 是否可以在没有 root 的情况下在 CentOS 上安装 g++?

我有一台装有CentOS5.8的核心i7机器,我通过SSH连接到它并用于运行模拟。不幸的是它只有gcc版本4.1.2。这似乎产生的程序比我在较慢的笔记本电脑上使用MicrosoftVisualExpressc++2010进行优化编译时得到的程序慢得多。我尝试了各种g++优化标志,但它们没有太大帮助,所以我想我需要升级gcc。我的机器上没有根目录,所以看起来我必须将它安装在我的主目录中。这是否可行?如果可行,是否需要任何具体说明才能做到这一点?谢谢 最佳答案 您可以使用EasyBuild,它可以让您非常轻松地安装特定的GCC版本而无需

c++ - 在一个 Linux 发行版上使用 g++ 编译的可执行文件在另一个发行版上使用是否有限制?

发行版之间是否存在任何特质或差异会影响在一个发行版上直接使用GCC4.7.x编译的C++二进制文件?我知道理想的情况是在第二个发行版上从源代码编译,但我真的不想担心在我的生产机器上编译新的GCC版本和程序源代码。我是一个相对缺乏经验的Linux用户(因此问题!)并且仍然更喜欢IDE而不是命令行编译,ssh是我真正可以用来访问生产机器的所有东西。代码本身没什么有趣的,但它确实使用了一些操作系统的常用功能,如阻塞套接字等。如有任何建议,我们将不胜感激! 最佳答案 除非二进制文件构建在完全相同的操作系统(包括版本)和完全相同的硬件上,否则