为什么我不能将ssl lib(-lssl)链接到这样的makefile中?

时间:2014-01-13 08:18:58

标签: c++ shared-libraries

有一个,所以包含一个cpp。 cpp包括:

include "openssl/evp.h"

OpenSSL_add_all_digests()

nm这样,并将符号视为U:

U OpenSSL_add_all_digests

因此我检查了'Makefile,它在makefile中不包含lib:libssl(-L -lssl),但它可以成功。

但是当我写一个cpp链接so并测试它时,如果我没有将libssl与test cpp链接,它将弹出“undefined reference”错误。

如何理解?

1 个答案:

答案 0 :(得分:1)

生成所以不需要解析所有符号; 生成可执行文件需要解析所有符号。

因此,如果生成一个,则可以使用“未定义的引用”,例如

testso.cpp:

void funcA();

void funcB()
{
  funcA();
}

并编译和链接如下:

g++ -fPIC -o testso.o -c testso.cpp  # COmpile
g++ testso.o -shared -o libtestso.so  # Link

您可以成功生成libtestso.so。

但是如果你尝试将它链接到可执行文件,则需要定义funcA()。