我尝试使用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是否错误,或者我的机器是否存在一些无法链接到我的库的问题。
答案 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
文件以与库链接在一起以解析所有参考文献。