2015-06-20 53 views
1

我寫了一個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

回答

0

sslcrypto庫添加到您的最終命令中,以便將這些庫鏈接到您的程序。

你也必須尊重的順序:因爲sll使用crypto所以你必須把後第一sslcrypto

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

這工作!在'helper.a'後面加上'-lcrypto -lssl'似乎是一個順序問題。鏈接到像'-lpthread'這樣的靜態庫時應該記住什麼?我沒有太多處理靜態庫的經驗,我之前完成的只是連接一些目標文件:-) – shihanlin9

相關問題