创建一个简单的“hello world”并将它与2个预编译对象链接在一起

时间:2014-04-18 06:39:04

标签: c++ c linker dev-c++ object-files

在我创建的项目中,我获得了“IGEL1.OBJ”和“IGEL2.OBJ”以及“IGEL.H”。

在Orwell Dev-C ++中,我采取以下步骤:

  
      
  1. '文件' - >'新' - >'项目...'
  2.   
  3. 注册'基本' - >'控制台应用' - >'C项目'
  4.   
  5. '名称:' - > IgelTest-> 'OK'
  6. 。   

然后在“项目”登记册下

  
      
  1. 右键点击'IgelTest'
  2.   
  3. '添加到项目'
  4.   

添加

  
      
  • IGEL1.OBJ
  •   
  • IGEL2.OBJ
  •   
  • IGEL.H
  •   

一旦我完成了这件事,我就去了

  
      
  1. '项目'
  2.   
  3. '项目选项'
  4.   
  5. 注册'文件'
  6.   
  7. 左键点击'IGEL1.OBJ'
  8.   
  9. 选中“文件”下的“包含在链接中”
  10.   
  11. 对'IGEL2.OBJ'重复相同的内容
  12.   
  13. 左键单击“确定”
  14.   

现在我的视图中有'main.c',点击'Compile&运行'按钮,并收到以下错误消息: mingw32-make.exe: * 没有规则来制作'IgelTest.exe'所需的目标'IGEL1.o'。停止。

我在这里上传了项目文件夹: https://mega.co.nz/#F!ggpWEJIK!bHu30zK8y4UXU-LoAdcddQ

这是'Makefile.win'的pastebin: http://pastebin.com/Pr9iS3Wc

1 个答案:

答案 0 :(得分:0)

如果你查看Makefile.win,你会发现它认为目标文件是 链接是:

LINKOBJ  = main.o IGEL1.o IGEL2.o

并且确实没有制定IGEL1.oIGEL2.o的规则。你的目标文件 <{1}}和IGEL1.OBJ根本没有被提及。

对于您正在使用的编译器 - GCC for Windows - 目标文件通常具有扩展名IGEL2.OBJ,而不是.o

如果将任何文件 name.extension 添加到Dev-C ++项目并检查包含在链接中,那么如果Dev-C ++无法识别 .extension 作为可以链接的文件的扩展,它认为该文件是某种文件,并且您想链接目标文件 name.o 是从它编译的。

这就是您的.obj文件所发生的情况。 makefile不包含制作规则 .objIGEL1.o因为IDE无法从IGEL2.o文件中生成.o文件。

要解决此问题,请重命名扩展名为.obj的{​​{1}}个文件。然后是联系 可以工作。但是,如果您的预编译.obj文件是32位格式且您的Dev-C ++版本是使用TDM GCC 64的版本,那么它仍然不会工作位工具链。然后你会得到一种不同类型的链接错误,为了解决这个问题,你需要从源代码中将.o文件重新编译为64位.obj文件。