【问题标题】:In function `_start': (.text+0x20): undefined reference to `main' collect2: ld returned 1 exit status在函数 `_start': (.text+0x20): undefined reference to `main' collect2: ld 返回 1 exit status
【发布时间】:2013-05-14 21:08:15
【问题描述】:

我是 g++ 新手,在 LINUX 中编译我的 C++ 代码。 我正在尝试使用 g++ 将几个 .o 文件连接为 .lib。

这是我使用“g++ -o ../fuzzy/fuzzy.lib example1.o example2.o”的命令并得到了这个错误。即使我尝试连接单个目标文件并制作 .lib,它也不起作用。

非常感谢您的帮助。

谢谢

【问题讨论】:

    标签: c++ g++


    【解决方案1】:

    要制作静态库,请使用ar:

    ar rcs mylibrary.a a.o b.o c.o
    

    要创建共享库,请使用gcc 链接:

    gcc -o mylibrary.so -shared a.o b.o. c.o
    

    【讨论】:

    • @Kerrek SB:太好了!!这是我将静态库链接到 .cpp 文件的方式吗? g++ -o nervolver -Wno-deprecated mylibrary.a example.cpp
    • @parthpatel:只需将其添加到您的文件列表中,但最后:g++ -o nervolver example.cpp mylibrary.a
    【解决方案2】:

    如果您尝试构建库,选项取决于您要构建静态库还是共享库。例如,

    # shared library
    g++ -shared -o name.so obj1.o obj2.o obj3.o
    

    静态库本质上是一个存档,您可以使用ar 命令从.o 文件构建它。

    ar <options> mylib.a obj1.o obj2.o obj3.o
    

    如果你试图编译一个目标文件,你需要传递-c 选项:

    g++ -c ....
    

    否则,g++ 会尝试编译可执行文件,这需要 main function

    【讨论】:

    • 我在编译 .cpp 文件时使用 g++ -c。那么我的命令应该是这样的吗? "g++ -c name1.lib example1.o example2.o"
    • @parthpatel 我的回答告诉你如何构建静态库。
    • 我不确定,但-fpic 不是也必须传递给每个编译步骤吗?
    • @KerrekSB 不错。实际上我认为它只需要传递给编译步骤,而不是构建库。我删除了它。稍后我可能会添加关于它的注释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    • 2019-07-31
    相关资源
    最近更新 更多