有一个,所以包含一个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”错误。
如何理解?
答案 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()。