none
Visual Studio C++ 2005 引用外部lib 编译问题 RRS feed

  • 问题

  • 最近在做一个关axis2c的项目,在使用VC++编译给的sample client 的源代码一直都通不过。 

    在给的代码中有个echo.mk 文件

    echo:
    @cl.exe /nologo /D "WIN32" /D "_WINDOWS" /D "AXIS2_DECLARE_EXPORT" /D "_MBCS" *.C /I.\..\..\..\include /c
    @link.exe /nologo echo.obj /LIBPATH:.\..\..\..\lib axiom.lib axutil.lib axis2_engine.lib axis2_parser.lib /OUT:echo.exe

    在command line 中使用nmake.exe可以直接编译出echo.exe文件

    但是在VC++里直接编译却一直没有成功。总是提示如下错误:

    ------ Build started: Project: echo, Configuration: Debug Win32 ------
    Linking...
    echo.obj : error LNK2019: unresolved external symbol __imp__axutil_env_free@4 referenced in function _main
    echo.obj : error LNK2019: unresolved external symbol __imp__axis2_svc_client_free@8 referenced in function _main
    echo.obj : error LNK2019: unresolved external symbol __imp__axiom_node_to_string@8 referenced in function _main
    echo.obj : error LNK2019: unresolved external symbol __imp__axis2_svc_client_send_receive@12 referenced in function _main
    echo.obj : error LNK2019: unresolved external symbol __imp__axis2_svc_client_engage_module@12 referenced in function _main
    echo.obj : error LNK2019: unresolved external symbol __imp__axis2_svc_client_set_options@12 referenced in function _main
    echo.obj : error LNK2019: unresolved external symbol __imp__axutil_log_impl_log_error referenced in function _main
    echo.obj : error LNK2019: unresolved external symbol __imp__axutil_error_get_message@4 referenced in function _main
    echo.obj : error LNK2019: unresolved external symbol __imp__axis2_svc_client_create@8 referenced in function _main
    echo.obj : error LNK2019: unresolved external symbol __imp__axis2_options_set_action@12 referenced in function _main
    echo.obj : error LNK2019: unresolved external symbol __imp__axis2_options_set_to@12 referenced in function _main
    echo.obj : error LNK2019: unresolved external symbol __imp__axis2_options_create@4 referenced in function _main
    echo.obj : error LNK2019: unresolved external symbol __imp__axis2_endpoint_ref_create@8 referenced in function _main
    echo.obj : error LNK2019: unresolved external symbol __imp__axutil_strcmp@8 referenced in function _main
    echo.obj : error LNK2019: unresolved external symbol __imp__axutil_env_create_all@8 referenced in function _main
    echo.obj : error LNK2019: unresolved external symbol __imp__axiom_element_set_text@16 referenced in function _build_om_payload_for_echo_svc
    echo.obj : error LNK2019: unresolved external symbol __imp__axiom_element_create@20 referenced in function _build_om_payload_for_echo_svc
    echo.obj : error LNK2019: unresolved external symbol __imp__axiom_namespace_create@12 referenced in function _build_om_payload_for_echo_svc
    D:\My Documents\Visual Studio 2005\Projects\echo\Debug\echo.exe : fatal error LNK1120: 18 unresolved externals
    Build log was saved at "file://d:\My Documents\Visual Studio 2005\Projects\echo\echo\Debug\BuildLog.htm"
    echo - 19 error(s), 0 warning(s)
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========



    在引入外部INCLUDE都已经配置好了,外部的在环境变量中PATH中也引入了C:\axis2c\lib的路径。


    将echo.mk中的 /nologo echo.obj /LIBPATH:.\..\..\..\lib axiom.lib axutil.lib axis2_engine.lib axis2_parser.lib /OUT:echo.exe 加到Project Property=>Debugging=>Command Arguments中也不行。

    这个问题已经困扰了我一个星期了,怎么才能让VC++ 直接能够编译通过呢?


    2009年5月12日 8:52

答案

  • 缺少实现,lib库路径是否正确,lib的路径需要添加到环境变量的lib路径下。
    2009年5月12日 12:14
    版主
  • > 在环境变量中PATH中也引入了C:\axis2c\lib的路径。
    应该在连接设置里设置吧?

    MSMVP VC++
    2009年6月17日 17:52
    版主
  • 你把它加到Debugging里面的Command Arguments肯定不行了,你应该把他加到Linker下的Command Line下的Additional options.

    或者在你main函数所在的文件一开始加上
    #pragma comment(lib, "../../../lib/axiom.lib")
    #pragma comment(lib, "../../../lib/axis2_engine.lib ")
    ......

    若相对路径不行,你就填绝对路径如
    #pragma comment(lib, "c:/lib/axiom.lib")


    0xBAADF00D
    2009年6月18日 4:49
    版主
  • 在Project->Properties弹出的工程设置对话框的
    Configuration Properties->Linker->General->Additional Library Directories添加上C:\axis2c\lib

    2009年6月20日 9:13

全部回复

  • 缺少实现,lib库路径是否正确,lib的路径需要添加到环境变量的lib路径下。
    2009年5月12日 12:14
    版主
  • 随便补充几句
    这种未解决的外部符号问题,多是由于有函数的定义,但是没有函数的实现引起的
    比如在头文件里声明了,但是没有函数体。

    一般@前面的就是出问题的函数名
    2009年5月12日 23:13
  • 函数实现是没有问题的,这个代码是axis2c给的sample代码,在COMMAND LINE 下用NMAKE编译ECHO.MK可以通过。但是现在就是没有办法在VISUAL STUDIO C++下直接编译成功。

    而且LIB 的环境变量也是配置了的。我感觉问题出现在对VISUAL STUDIO 的配置上面,但是查了各种资料都没有办法搞定。

    第一次做C的PROJECT,头都大了……
    2009年5月13日 2:50
  • > 在环境变量中PATH中也引入了C:\axis2c\lib的路径。
    应该在连接设置里设置吧?

    MSMVP VC++
    2009年6月17日 17:52
    版主
  • 你把它加到Debugging里面的Command Arguments肯定不行了,你应该把他加到Linker下的Command Line下的Additional options.

    或者在你main函数所在的文件一开始加上
    #pragma comment(lib, "../../../lib/axiom.lib")
    #pragma comment(lib, "../../../lib/axis2_engine.lib ")
    ......

    若相对路径不行,你就填绝对路径如
    #pragma comment(lib, "c:/lib/axiom.lib")


    0xBAADF00D
    2009年6月18日 4:49
    版主
  • 是不是有CPP啊。把函数实现的CPP加到工程中


    麻烦把正确答案设为解答。
    2009年6月19日 3:25
    版主
  • 在Project->Properties弹出的工程设置对话框的
    Configuration Properties->Linker->General->Additional Library Directories添加上C:\axis2c\lib

    2009年6月20日 9:13