【发布时间】:2015-06-20 16:20:47
【问题描述】:
我写了一个C函数,它调用openssl/sha.h中定义的函数,假设声明是"helper.h",实现是"helper.c"。然后我使用gcc编译了该函数并将其放入库中:
gcc -std=c99 -lcrypto -lssl -c helper.c -o helper.o
ar -rc helper.a helper.o
然后我写了一个cpp函数,调用"helper.h"中声明的函数。我加了
extern "C" {
#include "helper.h"
}
cpp 文件中的东西,然后我使用了
g++ test.cpp helper.a -o cpp
然后发生 ld 错误并说我遇到openssl/sha.h 中定义的函数的未定义引用。我想知道如何解决这个问题?
【问题讨论】:
-
将
-lssl也添加到第二个 gcc 命令中。 -
请注意,第一个命令的
-l选项将被忽略,因为没有完成链接。 -
@riodoro1 我试过了,还是不行
-
@Quentin 是的,我用
nm检查了helper.a,似乎sha.h中定义的函数标记为U。你知道如何解决这个问题吗? -
@shihanlin9 这很正常,sice helper.a 使用它们,但它们是在 libssl 中定义的。请定义“不起作用”,因为应该将
-lssl添加到您的最终链接命令中。