链接器错误,使用g ++链接到由gcc编译的库,未定义的引用该函数
问题描述:
我写了一个C函数,它调用openssl/sha.h
中定义的函数,假设声明为"helper.h"
,实现为"helper.c
“。该功能使用gcc并把它放在一个库:链接器错误,使用g ++链接到由gcc编译的库,未定义的引用该函数
gcc -std=c99 -lcrypto -lssl -c helper.c -o helper.o
ar -rc helper.a helper.o
然后我写了调用"helper.h"
声明功能的CPP功能我添加
extern "C" {
#include "helper.h"
}
东西在日在CPP文件,然后我用
g++ test.cpp helper.a -o cpp
然后发生LD错误并说我遇到用于openssl/sha.h
定义的函数未定义的引用。我想知道如何解决这个问题?
答
将ssl
和crypto
库添加到您的最终命令中,以便将这些库链接到您的程序。
你也必须尊重的顺序:因为sll
使用crypto
所以你必须把后第一ssl
和crypto
。
g++ test.cpp helper.a -o cpp -lssl -lcrypto
+0
这工作!在'helper.a'后面加上'-lcrypto -lssl'似乎是一个顺序问题。链接到像'-lpthread'这样的静态库时应该记住什么?我没有太多处理静态库的经验,我之前完成的只是连接一些目标文件:-) – shihanlin9
将'-lssl'加到第二个gcc命令中。 – riodoro1
请注意,第一个命令的'-l'选项被忽略,因为没有链接完成。 – Quentin
@ riodoro1我试过了,它不起作用 – shihanlin9