2010-08-03 33 views
0

我在使用visual studio 2005的windows XP上工作。 我的項目是在linux上創建LDAP抽象API後創建的Cmake項目。我嘗試以某種方式使其工作視窗。錯誤LNK2019試圖將openldap移植到窗口時無法解釋

我有型的一個不尋常的鏈接錯誤LNK2019

代碼:

main.obj : error LNK2019: symbole externe non résolu _strcpy référencé 
dans la fonction _menu 

碰巧這個功能是我的main.c和上面的鏈接錯誤是從我的其他正在添加文件LDAP.C至極包含load_values_from_attr()函數 代碼:

/****/ 

static INT16 load_values_from_attr(t_LdapSearchContext ctx, 
    UINT32 result_max_count, LDAP *ld, LDAPMessage *result_message, 
    BerElement *ptr) 
{ 
    UINT16 j=0; 
    UINT16 i=0; 

    char *str_attr; 
    struct berval **str_values; 
    str_attr=ldap_first_attribute(ld, result_message, &ptr); 

    if (str_attr == NULL) return 1; 
    str_values=ldap_get_values_len(ld, result_message, str_attr); 
    strcpy(ctx.attributs[i].attrs, str_attr); 
    while(str_values[j]!=NULL && j+1<RESULT_WIDTH) 
    { 
     strncpy(ctx.attributs[i].values[j+1].val, 
      str_values[j]->bv_val,MAX_LENGTH); 
#ifdef WIN32 
     ber_bvfree(str_values[j]); // <<< here is my problem 
#endif 
     j++; 
    } 

/****/ 

當我刪除或註釋行:ber_bvfree(str_values[j]);在鏈接錯誤發生,當我離開它時,程序編譯並可以執行,但段錯誤(這是另一個故事)。 我無法弄清楚爲什麼連接器是這樣做的,如果anyboby可以給我一些解釋我會成爲空地。

不要猶豫,問我更多的解釋。

+0

我的法語比較生疏,從來沒有說一個好的開始,但不鏈接抱怨在功能'strcpy'參考'menu'?爲什麼你認爲鏈接器錯誤出現在你已經執行的函數中?我注意到了對'strcpy'的調用。噢,如果你用'strncpy'替換strcpy,你會發現會發生什麼情況。 – torak 2010-08-03 17:23:49

+0

我認爲鏈接器抱怨對_strcpy的引用,我認爲這是strcpy轉換成前一步由precompilator創建的main.o對象的版本,是的你看起來好像它找不到合適的它的定義(我得到了正確的標題)。 我現在不能嘗試在strncpy中更改strcpy,但只要我可以。但是如果我離開ber_bvfree(str_values [j]),則返回 ;我不會得到鏈接器錯誤,並且每當我嘗試評論此行或將其刪除時,鏈接器錯誤都是他們的錯誤。 它可能來自別的東西,但我真的不知道 – LELEVATOR 2010-08-03 22:36:45

+0

以及即時通訊仍然說明爲什麼鏈接器這樣做,並用memcpy與strlen替換我所有的strcpy,仍然它給我1> main.obj:error LNK2019 :symbole externe nonrésolu_strlenréférencédans la fonction _menu ...(未解決的對_strlen的引用)。請注意,這個鏈接錯誤僅僅是在 – LELEVATOR 2010-08-04 09:13:16

回答

0

終於!!在visual studio中使用鏈接器選項之後,我想我們發現有 /NODEFAULTLIB:msvcrtd.lib 啓用,這個選項使用了連接器。沒有它,鏈接器可以正確鏈接不同的對象。 (此選項一直在觀察能有在我的代碼LNK2001鏈接器的問題,以及之後)

注:我仍然可以不要告訴此選項的原因是參與無法連結我自己的對象,usualy /NODEFAULTLIB:msvcrtd.lib用於禁用默認庫msvcrtd.lib包含。

我希望這會幫助別人

相關問題