链接GCC中的库

时间:2015-08-11 13:53:54

标签: c++ gcc makefile openssl

我尝试使用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是否错误,或者我的机器是否存在一些无法链接到我的库的问题。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

库链接应该在最后阶段完成 - 链接:)

-c表示"仅编译" - 它只构建.o目标文件,没有任何参考分辨率(因此-lXXX只会被忽略)。

-lXXX选项应添加到最后一次调用生成可执行文件的gcc(没有-c),其中收集所有.o文件以与库链接在一起以解析所有参考文献。