我在使用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可以給我一些解釋我會成爲空地。
不要猶豫,問我更多的解釋。
我的法語比較生疏,從來沒有說一個好的開始,但不鏈接抱怨在功能'strcpy'參考'menu'?爲什麼你認爲鏈接器錯誤出現在你已經執行的函數中?我注意到了對'strcpy'的調用。噢,如果你用'strncpy'替換strcpy,你會發現會發生什麼情況。 – torak 2010-08-03 17:23:49
我認爲鏈接器抱怨對_strcpy的引用,我認爲這是strcpy轉換成前一步由precompilator創建的main.o對象的版本,是的你看起來好像它找不到合適的它的定義(我得到了正確的標題)。 我現在不能嘗試在strncpy中更改strcpy,但只要我可以。但是如果我離開ber_bvfree(str_values [j]),則返回 ;我不會得到鏈接器錯誤,並且每當我嘗試評論此行或將其刪除時,鏈接器錯誤都是他們的錯誤。 它可能來自別的東西,但我真的不知道 – LELEVATOR 2010-08-03 22:36:45
以及即時通訊仍然說明爲什麼鏈接器這樣做,並用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