在 GCC 中链接库
Linking libraries in GCC
我正在尝试使用 makefile 在 ubuntu 中编译一些文件。
在网络上多次搜索后,我在我的 makefile 中添加了以下行。
run: hellocode.cpp
g++ -c hellocode.cpp -lssl -lcrypto
仍然在编译时创建目标文件,然后抛出此错误:
对'SSL_write'的未定义引用...
相反,如果删除'-c'并像这样使用它
run: hellocode.cpp
g++ hellocode.cpp -lssl -lcrypto
然后我没有看到之前 linking 的错误,但它显示了与 openssl linking 无关但与代码中的其他文件相关的不同错误。我已经在这个论坛上浏览了很多与此相关的问题 none 似乎在这方面对我有所帮助。
请告诉我是不是我的 makefile 有误,还是我的机器有问题导致它无法 link 我的图书馆。
库 linking 应该在最后阶段完成 - linking :)
-c
表示 "compile only" - 它只是构建 .o
目标文件,没有任何参考解析(所以 -lXXX
在那里被忽略)。
-lXXX
选项应该添加到最后一次调用 gcc
(没有 -c
),它生成可执行文件,其中所有 .o
文件都收集到 link 与库一起解析所有引用。
这是一个您可以采用的简单 Makefile。请注意,编译和 linking 是 2 个步骤。如果需要,您可以使用 -I
作为额外的包含路径,使用 -L
作为额外的 link 路径。
.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 在 ubuntu 中编译一些文件。 在网络上多次搜索后,我在我的 makefile 中添加了以下行。
run: hellocode.cpp
g++ -c hellocode.cpp -lssl -lcrypto
仍然在编译时创建目标文件,然后抛出此错误: 对'SSL_write'的未定义引用...
相反,如果删除'-c'并像这样使用它
run: hellocode.cpp
g++ hellocode.cpp -lssl -lcrypto
然后我没有看到之前 linking 的错误,但它显示了与 openssl linking 无关但与代码中的其他文件相关的不同错误。我已经在这个论坛上浏览了很多与此相关的问题 none 似乎在这方面对我有所帮助。
请告诉我是不是我的 makefile 有误,还是我的机器有问题导致它无法 link 我的图书馆。
库 linking 应该在最后阶段完成 - linking :)
-c
表示 "compile only" - 它只是构建 .o
目标文件,没有任何参考解析(所以 -lXXX
在那里被忽略)。
-lXXX
选项应该添加到最后一次调用 gcc
(没有 -c
),它生成可执行文件,其中所有 .o
文件都收集到 link 与库一起解析所有引用。
这是一个您可以采用的简单 Makefile。请注意,编译和 linking 是 2 个步骤。如果需要,您可以使用 -I
作为额外的包含路径,使用 -L
作为额外的 link 路径。
.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 如果有帮助的话。