在 GCC 中链接库
Posted
技术标签:
【中文标题】在 GCC 中链接库【英文标题】:Linking libraries in GCC 【发布时间】:2015-08-11 13:53:54 【问题描述】:我正在尝试使用 makefile 在 ubuntu 中编译一些文件。 在网络上进行了几次搜索后,我在 makefile 中添加了以下几行。
run: hellocode.cpp
g++ -c hellocode.cpp -lssl -lcrypto
仍然在编译时创建目标文件,然后抛出此错误: 对“SSL_write”的未定义引用....
相反,如果删除'-c'并像这样使用它
run: hellocode.cpp
g++ hellocode.cpp -lssl -lcrypto
然后我没有看到之前的链接错误,但它显示了与 openssl 链接无关但与代码中的其他文件相关的不同错误。我已经在这个论坛上浏览了许多与此相关的问题,似乎没有一个对我有帮助。
请告诉我我的 makefile 是否错误,或者我的机器是否存在无法链接到我的库的问题。
【问题讨论】:
【参考方案1】:这是一个您可以采用的简单 Makefile。请注意,编译和链接是两个步骤。如果需要,您可以使用 -I
获取其他包含路径,使用 -L
获取其他链接路径。
.PHONY : all
all : hellocode
hellocode : hellocode.o
g++ -o hellocode hellocode.o -lssl -lcrypto
hellocode.o : hellocode.cpp
g++ -c hellocode.cpp -o hellocode.o
如果有帮助,这里有一些basics of makefiles。
【讨论】:
感谢我相应地更改了我的 makefile 并且它有效:) :) GitHub 中有一个simple makefile example。【参考方案2】:图书馆链接应该在最后阶段完成 - 链接:)
-c
表示“仅编译” - 它只是构建 .o
目标文件,没有任何参考解析(因此 -lXXX
在那里被忽略)。
-lXXX
选项应添加到最后一次调用gcc
(不带-c
),它会生成可执行文件,其中所有.o
文件都被收集起来以与库链接在一起以解析所有引用。
【讨论】:
以上是关于在 GCC 中链接库的主要内容,如果未能解决你的问题,请参考以下文章