【问题标题】:Creating a simple 'hello world' and linking it together with 2 pre-compiled objects创建一个简单的“hello world”并将其与 2 个预编译对象链接在一起
【发布时间】:2014-06-02 15:35:18
【问题描述】:

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

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

  1. '文件'->'新建'->'项目...'
  2. 注册“基础”->“控制台应用”->“C项目”
  3. '名称:'->IgelTest->'OK'。

然后在'项目'寄存器下

  1. 右键单击“IgelTest”
  2. '添加到项目'

因此添加

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

完成后我就去

  1. “项目”
  2. “项目选项”
  3. 注册“文件”
  4. 左键单击“IGEL1.OBJ”
  5. 选中“文件”下的“包含在链接中”
  6. 对“IGEL2.OBJ”重复同样的操作
  7. 左键单击“确定”

现在我的视图中有“main.c”,单击“编译并运行”按钮,并收到以下错误消息: mingw32-make.exe:* 没有规则来制作目标“IGEL1.o”,“IgelTest.exe”需要。停下来。

我已在此处上传项目文件夹: https://mega.co.nz/#F!ggpWEJIK!bHu30zK8y4UXU-LoAdcddQ

这是“Makefile.win”的粘贴箱: http://pastebin.com/Pr9iS3Wc

【问题讨论】:

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


    【解决方案1】:

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

    LINKOBJ  = main.o IGEL1.o IGEL2.o
    

    而且确实没有制作IGEL1.oIGEL2.o 的规则。您的目标文件 根本没有提到IGEL1.OBJIGEL2.OBJ

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

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

    这就是您的.obj 文件所发生的情况。 makefile 不包含制作规则 IGEL1.oIGEL2.o,因为 IDE 无法从 .obj 文件中创建 .o 文件。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多