链接器错误,使用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定义的函数未定义的引用。我想知道如何解决这个问题?

+1

将'-lssl'加到第二个gcc命令中。 – riodoro1

+0

请注意,第一个命令的'-l'选项被忽略,因为没有链接完成。 – Quentin

+0

@ riodoro1我试过了,它不起作用 – shihanlin9

sslcrypto库添加到您的最终命令中,以便将这些库链接到您的程序。

你也必须尊重的顺序:因为sll使用crypto所以你必须把后第一sslcrypto

g++ test.cpp helper.a -o cpp -lssl -lcrypto 
+0

这工作!在'helper.a'后面加上'-lcrypto -lssl'似乎是一个顺序问题。链接到像'-lpthread'这样的静态库时应该记住什么?我没有太多处理静态库的经验,我之前完成的只是连接一些目标文件:-) – shihanlin9