使用Netbeans編譯C++檔案,動態連結庫的方法
一鍵執行時會出現類似於下面的錯誤:
Undefined symbols for architecture x86_64:
"___gmp_printf", referenced from:
_main in main.o
"___gmpz_init", referenced from:
_main in main.o
"___gmpz_set_str", referenced from:
_main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [dist/Debug/GNU-MacOSX/cppapplication_1] Error 1
明明頭部包含了所用的庫為什麼還會報錯顯示不能識別相關的方法呢?
問題出在應該動態連結庫,在終端執行下面程式碼:(Mac 執行環境,NetBeans編輯器)
#include<iostream>
#include<gmp.h>
#include<gmpxx.h>
using namespace std;
int main()
{
mpz_t a;
mpz_init(a);
int flag=mpz_set_str(a,"12",8);
if(flag==0)
gmp_printf("a is %Zd\n",a);
return 0;
}
正確的終端執行命令是:
g++ main.cpp -o main.o -lgmp
./mian.o
可以正確執行。但是在Netbeans執行時就會出現文章剛開始那樣的報錯。
問題就出在沒有執行時連結gmp庫。
進入NetBeans->檔案->專案屬性->構建->連結器->編譯行->其他選項中:增加需要動態連結的庫(就是命令列中需要在最後-lxxx的命令)
我需要連結的是gmp庫,所有添加了“-lgmp”.點選確定之後,在返回執行程式,直接順利執行,
OK!
(注意這時候需要清理並重新構建專案,然後才能重新按照最新的設定進行編譯執行哦)!