0

Visual Studio2005を使用してWindowsXPで作業しています。私のプロジェクトは、LinuxでLDAP抽象化APIを作成した後に作成されたCmakeプロジェクトです。私はどういうわけかそれをWindowsで動作させるようにしています。

タイプLNK2019の異常なリンクエラーが発生しました

main.obj:エラーLNK2019:symboleexternenonrésolu_strcpyréférencédanslafonction_menu

この関数が私のmain.cにあり、上記のリンクエラーがload_values_from_attr()関数を含む他のファイルLDAP.Cから発生していることが起こります。

/****/

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]);、リンクエラーが発生し、そのままにしておくと、プログラムがコンパイルされて実行できますが、セグメンテーション違反が発生します(これは別の話です)。

リンカがこのように動作している理由がわかりません。

4

1 に答える 1

0

ついに !!Visual Studioでリンカーオプションを操作した後、リンカーをねじ込んだオプションである/NODEFAULTLIB:msvcrtd.libenableがあったことがわかりました。これがないと、リンカはさまざまなオブジェクトを正しくリンクできます。(このオプションは、私のコードにもlnk2001リンカーの問題があることを確認した後に有効になりました)

注意:このオプションが自分のオブジェクトのリンクに問題がある理由はまだわかりません。通常、/ NODEFAULTLIB:msvcrtd.libを使用して、デフォルトのライブラリmsvcrtd.libを無効にします。

これが誰かに役立つことを願っています

于 2010-08-04T16:38:26.397 に答える