【问题标题】:link .a and .o files in GCC在 GCC 中链接 .a 和 .o 文件
【发布时间】:2026-01-05 01:20:08
【问题描述】:

我有两个预编译库:X.aY.a 和一个 test.cpp(没有 main 函数)源代码使用这两个库。

我使用以下代码编译了 C++:

g++ -c test.cpp

我得到了“test.o”。

现在我如何将这三个链接在一起以生成.a 文件,因为 test.cpp 使用 X.a 和 Y.a 以及其他 GCC 库中的某些函数?

顺便说一句,我正在使用 MinGW 在 Windows 下执行这些操作。我可以将此 .a 文件重命名为 .lib 并在 VC 中使用此 .lib 吗?

谢谢!

【问题讨论】:

    标签: c++ gcc visual-c++ mingw


    【解决方案1】:

    现在我该如何链接这三个 一起生成一个 .a 文件,因为 test.cpp 在 X.a 和 Y.a 和其他 GCC 库?

    .a 只不过是包含所有目标文件的 ar 存档(.o 文件)

    我可以将此 .a 文件重命名为 .lib 吗? 在 VC 中使用这个 .lib?

    是的,但它需要一些小技巧才能工作。看: http://opensees.berkeley.edu/community/viewtopic.php?t=2267

    【讨论】:

      【解决方案2】:

      为了将您的目标文件添加到静态库中,您必须使用以下命令:

      ar rcs X.a test.o
      

      但是如果你有 X.a 和 Y.a 我想你不是 X 和 Y 的作者,所以我不确定你真的想加入他们!

      您可能决定将每个目标文件链接到一个可执行文件中,但您需要main 函数!

      编辑: 另外我建议你阅读this

      【讨论】:

      • 谢谢。问题是我需要使用 GCC 来获取一个静态库并使用 VC 来链接这个静态库,因为我在 GCC 中做了一些 fortran 的东西..
      • @David:很遗憾我对VC一无所知,但看来vartec给了你一些有用的信息。