繁体   English   中英

链接器删除库,无法识别

[英]linker delets library and does not recognize it

我正在使用g ++编译C程序,并将其链接到库mylib.lib,该库位于与源代码相同的文件夹中,方法是:

user$ g++ myprog.c -o mylib.lib

并且编译器的行为方式很奇怪。 首先,它给出错误“对fun1的未定义引用”。 这不会发生,因为fun1在mylib.lib中。 其次,它删除mylib.lib。 我还尝试了另一种方式:

user$ g++ myprog.c mylib.lib

在这种情况下,我会得到相同的错误:“对fun1的未定义引用”最后,我尝试通过以下方式添加mylib:

  1. 将mylib.lib重命名为libmylib.lib

2。

user$ g++ myprog.c -L/Dima/Tests -l mylib

在这种情况下,尽管位于/ Dima / Tests中,但错误为“找不到lmylib”。 如何正确编译?

您不是在构建库,而是在尝试创建名为mylib.lib可执行程序。 这就是链接器被调用的原因。

如果要创建一个库,它取决于您所针对的工具链,但是通常来说,您只能创建目标文件,并创建这些目标文件的存档。

对于GNU工具链(GCC和GNU binutils链接器),您可以使用ar程序创建此归档文件。

$ g++ mylib.c -c             # Create object file named `mylib.o`
$ ar crv libmylib.a mylib.o  # Create the static library

现在你有一个包含目标文件中的静态库myprog.o是从编译myprog.c 要使用它,请执行以下操作

$ g++ myprog.c -L. -lmylib -o myprog

上面的命令告诉链接器在当前目录( -L. )中查找并与库mylib链接(链接器自动查找libmylib.a )。

同样,在使用GNU链接器时,将库放在任何源文件或目标文件之后也很重要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM