2013-01-31 85 views
-1

我嘗試編譯一個程序,我必須控制一個DAQ設備。在Windows中,g ++編譯並鏈接OK,但在Linux中卻不行。該接頭(G ++調用)顯示:G ++:鏈接器似乎沒有正確鏈接

g++ -Wall -o "acelerar-30-0" "acelerar-30-0.cpp" (en el directorio: /home/poly/) 
/tmp/ccRLpB4q.o: In function `main': 
acelerar-30-0.cpp:(.text+0x429): undefined reference to `AdxInstantAoCtrlCreate' 
collect2: ld returned 1 exit status 
Ha fallado la compilación. 

cpp文件是這樣的(切):

include stdlib.h 
include stdio.h 
include math.h 
include "compatibility.h" 
include "bdaqctrl.h" 
include "comunes.h" 
using namespace Automation::BDaq; 
define deviceDescription L"USB-4704,BID#0" 
int32  channelStart = 0; 
int32  channelCount = 1; 
double  voltaje[0]; 
int32  modo; 
int32  ms; 
int main(int argc, char* argv[]) 
{ 
    if (argc!=3) 
     salidaerror(argv[0],1); 
    channelStart = atoi(argv[1]); 
    ms = atoi(argv[2]); 
    if (channelStart<0||channelStart>1||ms<10) 
     salidaerror(argv[0],1); 
    ErrorCode ret = Success; 
    InstantAoCtrl * instantAoCtrl = AdxInstantAoCtrlCreate(); 
... 

我已經好幾個小時這一點,並不能找到答案。該SDK適用於Debian/Ubuntu,並且它具有相同的Linux和Windows代碼。

任何提示?由於

編輯:去掉了一些痕跡,因爲格式化是不正確的

+0

其中是'AdxInstantAoCtrlCreate()'定義? – zmb

+0

在文件bdaqctrl.h中。這個文件有:InstantAoCtrl * AdxInstantAoCtrlCreate();和:__inline InstantAoCtrl * AdxInstantAoCtrlCreate() { 回報(InstantAoCtrl *)BDaqObjectCreate( 「AdxInstantAoCtrlCreate」); }有很多,如果事情...我可以上傳文件,如果你想 –

+0

你應該發佈相關的部分,是的... – Matthieu

回答

1

在我的(有限)的經驗,典型的海灣合作委員會的行爲會要求您指定包含函數庫作爲像這樣的命令行參數:

-lsome_library 

即使圖庫位於庫路徑中,這也是必需的(其他庫路徑可以用-L指定)。找到包含該函數的適當庫文件,並使用其文件名減去擴展名並在上面的參數格式中引用「lib」。

+0

你是對的:我找到了庫,所以仍然無法鏈接它。它位於/ usr/lib中,它被稱爲libbiodaq.so,所以我附加到g ++參數的末尾:-llibbiodaq沒有成功:(仍在尋找它 –

+0

解決方案是:-lbiodaq,not -llibbiodaq謝謝! –