Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >如何让我的makefile编译/链接旧的和更新的GCC/GNU库?C++

如何让我的makefile编译/链接旧的和更新的GCC/GNU库?C++
EN

Stack Overflow用户
提问于 2013-04-29 09:41:50
回答 1查看 362关注 0票数 0

在我的MacBook中,GNU4.7.1是默认的。当我在学校的服务器上运行我的程序时,我不断地得到大量的分段错误。我从学校服务器下载了程序的当前状态,这样我就可以使用NetBeans来帮助调试。我在让更新的GNU替换我的MacBook继续设置为默认的旧的4.2版本时遇到了很多问题。

OSX编译器对我来说是全新的,我无法调整我的makefile来编译所有的东西,就像它在我学校的服务器上一样。

人们告诉我使用gcc或g++代替其他,但其他人告诉我,这不应该重要。据我所知,OSX为c/c++使用不同的GNU更新版本库,现在Clang是标准吗?我想坚持GNU/GCC,因为这是我在CS课程中使用的。

目前看来,当我的makefile试图链接“std::‘t 19937”时,它找不到链接它的头。

,我的问题是:如何让我的makefile编译,以便使用std::mt19937和c++11库?

makefile

代码语言:javascript
代码运行次数:0
复制
OBJECTS = Ammunition.o Armor.o Consumable.o Creature.o Entity.o Gold.o Item.o parser.o Potion.o Scroll.o Weapon.o XMLSerializable.o CreatureFactory.o DungeonLevel.o Player.o Tile.o ItemFactory.o
HEADERS = Ammunition.h Armor.h Consumable.h Creature.h Entity.h Gold.h Item.h parser.h Potion.h Scroll.h Weapon.h XMLSerializable.h CreatureFactory.h DungeonLevel.h Player.h Tile.h ItemFactory.h

all: Jhack

# I tried this and adding $(LIBS) where "-std=c++0x" is below.. 
# LIBS = -std=c++0x -std=c++11 -std=gnu++11

%.o: %.cpp $(HEADERS)
    gcc -c $< -o $@ -std=c++0x

Jhack: $(OBJECTS) main.o
    gcc -o Jhack $^

clean:
        rm -f *.o Jhack

run: Jhack
    ./Jhack

我试着把"-std=c++0x“换成-std=c++11和-std=gnu++11,我也尝试把它们都加进去。我也试着用g++交换gcc,但是我似乎想要改变的每一件事都会导致更多的错误和警告。

下面是当前错误消息的第一部分(它不停地进行):

代码语言:javascript
代码运行次数:0
复制
gcc -c Ammunition.cpp -o Ammunition.o -std=c++0x
gcc -c Armor.cpp -o Armor.o -std=c++0x
gcc -c Consumable.cpp -o Consumable.o -std=c++0x
gcc -c Creature.cpp -o Creature.o -std=c++0x
gcc -c Entity.cpp -o Entity.o -std=c++0x
gcc -c Gold.cpp -o Gold.o -std=c++0x
gcc -c Item.cpp -o Item.o -std=c++0x
gcc -c parser.cpp -o parser.o -std=c++0x
gcc -c Potion.cpp -o Potion.o -std=c++0x
gcc -c Scroll.cpp -o Scroll.o -std=c++0x
gcc -c Weapon.cpp -o Weapon.o -std=c++0x
gcc -c XMLSerializable.cpp -o XMLSerializable.o -std=c++0x
gcc -c CreatureFactory.cpp -o CreatureFactory.o -std=c++0x
gcc -c DungeonLevel.cpp -o DungeonLevel.o -std=c++0x
gcc -c Player.cpp -o Player.o -std=c++0x
gcc -c Tile.cpp -o Tile.o -std=c++0x
gcc -c ItemFactory.cpp -o ItemFactory.o -std=c++0x
gcc -c main.cpp -o main.o -std=c++0x
gcc -o Jhack Ammunition.o Armor.o Consumable.o Creature.o Entity.o Gold.o Item.o parser.o         Potion.o Scroll.o Weapon.o XMLSerializable.o CreatureFactory.o DungeonLevel.o Player.o Tile.o     ItemFactory.o main.o
ld: warning: ignoring file Creature.o, file was built for unsupported file format ( 0x7f      0x45 0x4c 0x46 0x 2 0x 1 0x 1 0x 0 0x 0 0x 0 0x 0 0x 0 0x 0 0x 0 0x 0 0x 0 ) which is not the      architecture being linked (x86_64): Creature.o
Undefined symbols for architecture x86_64:
  "Creature::removeMonster(DungeonLevel&)", referenced from:
      vtable for Player in Player.o
  "Creature::dumpObjectData()", referenced from:
      Player::dumpObjectData()      in Player.o
  "Creature::setElementData(std::basic_string<char, std::char_traits<char>,     std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char>     >)", referenced from:
      Player::setElementData(std::basic_string<char, std::char_traits<char>,     std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char>   >) in Player.o
  "Creature::writeDataAsFragment(std::basic_ostream<char, std::char_traits<char> >&)",    referenced from:
      Player::writeDataAsFragment(std::basic_ostream<char, std::char_traits<char> >&) in     Player.o
  "Creature::move(DungeonLevel&, Creature&, std::mersenne_twister_engine<unsigned int,   32ul, 624ul, 397ul, 31ul, 2567483615u, 11ul, 4294967295u, 7ul, 2636928640u, 15ul, 4022730752u,   18ul, 1812433253u>&)", referenced from:
      vtable for Player in Player.o
  "Creature::getHP()", referenced from:
      vtable for Player in Player.o
      _main in main.o
  "Creature::setHP(int)", referenced from:
      Player::Player() in Player.o
      Player::Player() in Player.o
      vtable for Player in Player.o
  "Creature::attack(Creature*, Creature&, std::mersenne_twister_engine<unsigned int, 32ul,   624ul, 397ul, 31ul, 2567483615u, 11ul, 4294967295u, 7ul, 2636928640u, 15ul, 4022730752u, 18ul,  1812433253u>&, DungeonLevel&)", referenced from:
      vtable for Player in Player.o
  "Creature::getXLoc()", referenced from:
      vtable for Player in Player.o
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-30 13:19:57

结果我搞砸了编译器和MacPorts安装到错误位置的路径?新的OSX安装和适当的GNU未注明日期解决它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16284935

复制
相关文章
gcc编译参数:如何包含头文件和动态链接库
以上一个代码实例gdal计算NDVI为例: 如何在Linux下使用gcc进行编译? (顺便说一下,上次的代码只能在gdal1下编译,因为gdal2和1的API稍微有些改动) gdal的动态链接库如果采用默认的安装方式应该在/usr/local/lib目录下面,而头文件在/usr/include/gdal目录下面。 那么,我们的编译命令应该是这样的:g++ NDVI.cpp -std=c++11 -I/usr/include/gdal -L/usr/local/lib -lgdal -o NDVI.o 其中: -std=c++11 指定使用C++11标准进行编译。因为上一个代码中使用了C++11中的std::array 等特性。
卡尔曼和玻尔兹曼谁曼
2019/01/22
3K0
makefile 编译参数_gcc使用说明
我们编译源文件的时候,可以分步编译,也可以使用gcc test.c -o test直接生成可执行文件。将多个源文件编译输出时,需要一起进行gcc编译,可利用Makefile文件来实现。
全栈程序员站长
2022/11/08
5050
makefile 编译参数_gcc使用说明
关于编译的重要概念总结
回想初学编程的时候,大部分人都是从C语言开始学起的,除了一些常见的语法和思想,一些基础知识常常被人们忽略,如果没有及时地进行梳理,可能短时间内没有太大的影响,但是在日后碰到这些问题时仍旧一头雾水。例如C语言是一门编译型语言,编译型语言首先将源代码编译生成机器语言,再由机器运行机器码(二进制)。对于编译型语言,绕不过的就是编译器。
timerring
2023/04/04
9620
关于编译的重要概念总结
CentOS 上安装GNU编译器套件—GCC
通常所说的GCC是GUN Compiler Collection的简称,除了编译程序之外,它还含其他相关工具,所以它能把易于人类使用的高级语言编写的源代码构建成计算机能够直接执行的二进制代码。GCC是Linux平台下最常用的编译程序,它是Linux平台编译器的事实标准。同时,在Linux平台下的嵌入式开发领域,GCC也是用得最普遍的一种编译器。
会长君
2023/04/26
2.5K0
matlab让我的旧手机起死回生
前不久有伙伴在Q群中询问用matlab调用网络摄像头的事,其实咱很久之前就分享过,由于看的人太少了就给删了。今天重新整理分享出来,本文的主角就是IP Webcam,通过它就可以轻松将智能手机转变成网络摄像头,这也是为啥将标题取为“matlab让我的旧手机起死回生”的原因。如果手中有闲置旧手机,安上IP Webcam,打开手机无线热点(无需使用数据流量和WiFi就能用,仅打开热点),旧手机里面变成一个全能监控王。接下来就一起来看看怎么操作的吧!
巴山学长
2022/03/30
1.2K0
matlab让我的旧手机起死回生
CentOS/Redhat R包使用新的gcc编译【更新】
一些有C++代码的R包可能会用到一些新的C++特性,需要C++11或者C++14。这个问题通常在CentOS/红帽系统上出现,因为系统稳定的要求,这个系列的系统它的C++版本很低。但请读者前往注意了别自己编译新版本的gcc,然后替换掉系统的。这种操作我试过几次,系统基本上就崩掉了。
王诗翔呀
2022/01/21
1.8K0
Linux C++编译和链接
Linux系统中最常用的编译器是g++,这是来自Free Software Foundation的GUN C++编译器。Linux的多数版本都包含该编译器,但并不一定总会安装它。g++编译器的工作方式很像标准UNIX编译器。例如,下面的命令将生成可执行文件a.out
狼啸风云
2022/06/06
2.4K0
【GUN和Linux到底是什么关系,gcc,make,cmake,yum是什么】
 特别鸣谢:木芯工作室 孔子学鼓琴师襄子,十日不进。师襄子曰:“可以益矣。”孔子曰:“丘已习其曲矣,未得其数也。”有间,曰:“已习其数,可以益矣。”孔子曰:“丘未得其志也。”有间,曰:“已习其志,可以益矣。”孔子曰:“丘未得其为人也。”有间,有所穆然深思焉,有所怡然高望而远志焉。曰:“丘得其为人,黯然而黑,几然而长,眼如望羊,如王四国,非文王其谁能为此也!”师襄子辟席再拜,曰:“师盖云文王操也。”
20岁爱吃必胜客
2022/11/13
2K0
make makefile cmake qmake都是什么,有什么区别?
作者:玟清 链接:https://www.zhihu.com/question/27455963/answer/36722992 来源:知乎 著作权归作者所有,转载请联系作者获得授权。
bear_fish
2018/09/19
2.2K0
make makefile cmake qmake都是什么,有什么区别?
C++ gcc编译过程
第一步:预处理 将源代码的.c 、.cpp 、.h 等文件包含到一个文件中。在这个过程中会使用一些预处理指令要求编译器使用什么样的方式包含这些文件。预处理结束之后对于c语言编译器会生成一个.i 文件。C++会生成.ii文件。
老九学堂-小师弟
2019/09/20
5.2K0
操作系统(5)实验0——makefile的写法
之前GCC那部分我提到过,gcc啥啥啥啥傻傻的那个指令只能够编译简单的代码,如果要干大事(例如突然心血来潮写个c开头的神经网络库之类的),还是要写Makefile来编译。其实在Windows下通常用IDE,例如Visual Studio,那个所谓的“项目”就有点像Makefile。通常Windows系统下这类IDE会自动帮你配置了编译时需要的东西,而Linux环境下我们需要自己来写Makefile来实现IDE的效果,听起来会麻烦点,实际上掌握了技巧之后就那样。
太阳影的社区
2021/10/15
1.7K0
第009课 gcc和arm-linux-gcc和Makefile
hello.c(预处理)->hello.i(编译)->hello.s(汇编)->hello.o(链接)->hello
韦东山
2020/09/30
4.9K0
第009课 gcc和arm-linux-gcc和Makefile
Linux 编译动态库_makefile编译动态库
其中,“-shared” 表示要生成的为动态链接库文件; “-soname, libstr.so” 表示生成的动态链接库的别名为“libstr.so”; “-o libstr.so” 表示生成名字为“libstr.so.1”的实际动态链接库文件;
全栈程序员站长
2022/11/09
6.2K0
gcc编译的过程
预处理是读取 c 源程序,对其中的伪指令(以 # 开头的指令,也就是宏)和特殊符号进行“替代”处理;经过此处理,生成一个没有宏定义、没有条件编译指令、没有特殊符号的输出文件。这个文件的含义同没有经过预处理的源文件是相同的,仍然是 C 文件,但内容有所不同。
Gnep@97
2023/08/10
2740
gcc编译的过程
Linux从入门到入土③(GCC、静态与动态链接库、Git、Make、Makefile)
GCC是由GNU开发的编程语⾔编译器,包括C、Cpp、Objective-C、Fortran、Java、Ada、Golang。
十八岁讨厌编程
2022/12/10
1.6K0
gcc编译器如何使用_gcc编译器用什么语言写的
预处理(preprocessing):对 .c 源文件进行预处理,生成 .i 文件。 编译(compilation):对 .i 文件进行编译,生成 .s 汇编文件。 汇编(assembly):对 .s 文件进行汇编,生成 .o 目标文件。 链接(linking):对 .o 文件进行链接,生成可执行文件。
全栈程序员站长
2022/09/20
1.7K0
gcc编译器如何使用_gcc编译器用什么语言写的
gcc编译成动态库_gcc动态库
第一步:使用-shared参数生成动态库,gcc -shared -fPIC -o libtest.so test.c 然后把libtest.so复制到/usr/lib64/系统路径下
全栈程序员站长
2022/11/19
1.7K0
C++ 编译器和链接器的完全指南
编译器是将源代码转换为可执行文件的程序。在C++中,常用的编译器有GCC和Clang。编译器的主要工作是将源代码翻译成汇编代码,然后再将汇编代码转换成机器码。编译器还可以进行优化,使得程序的执行效率更高。
小万哥
2023/05/13
8730
C++ 编译器和链接器的完全指南
gcc的编译命令_cmake 编译
—————-加入新公司后,基本上是一键式打包脚本,对于GCC基本上快忘了,重新拾起。
全栈程序员站长
2022/11/04
1.9K0
arm 开发板更新 gcc/gcc++ | Debain 更新 gcc,无需编译直接更新 gcc
网上的方法,大多是copy的,要下载gcc源码包,然后编译。我想说,你就算用 8G 内存的电脑,解压、配置、编译,没几个小时搞不来。
痴者工良
2021/04/26
7990

相似问题

gcc用makefile编译时的链接错误

21

GNU GCC编译器更新

12

用gcc和gnu make链接静态库

14

适当的Makefile替换gcc编译/链接运行?

13

如何交叉编译gcc的gnu/hurd和guix?

112
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文