【问题标题】:LNK1104: cannot open file 'wxbase28d.lib'LNK1104:无法打开文件“wxbase28d.lib”
【发布时间】:2015-11-11 10:48:26
【问题描述】:

我正在尝试编译使用 wxWidgets 库创建的现有项目。 我成功编译了 wxWidgets 2.8.12 库。 现在,我正在尝试编译我的项目。 但我得到错误:

fatal error LNK1104: cannot open file 'wxbase28d.lib'

之后我在设置中添加了一些变量,例如:

C/C++->预处理器定义:

WIN32;__WXMSW__;_WINDOWS;_DEBUG;__WXDEBUG__;_CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)

VC++ 目录->包括目录:

D:\instantclient_12_1\sdk\include;$(WXWIN)\lib\vc_lib\mswd;$(WXWIN)\include;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)include;$(FrameworkSDKDir)\include;

链接器->常规->附加库目录:

$(WXWIN)\lib\vc_lib;E:\app\vasyl\product\11.1.0\db_1\OCI\lib\MSVC\vc71;$(WXDIR284)\lib\vc_lib;%(AdditionalLibraryDirectories)

Resources->General->Additional Include 目录:

$(WXWIN)\include;c:\wxMSW284\include;$(WXDIR284)\include;%(AdditionalIncludeDirectories)

现在情况是这样的:

1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _free already defined in LIBCMTD.lib(dbgfree.obj)
1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _malloc already defined in LIBCMTD.lib(dbgmalloc.obj)
1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _realloc already defined in LIBCMTD.lib(dbgrealloc.obj)
1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _memmove already defined in LIBCMTD.lib(memmove.obj)
1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _tolower already defined in LIBCMTD.lib(tolower.obj)
1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _isalpha already defined in LIBCMTD.lib(_ctype.obj)
1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _isdigit already defined in LIBCMTD.lib(_ctype.obj)
1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _isspace already defined in LIBCMTD.lib(_ctype.obj)
1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _strtol already defined in LIBCMTD.lib(strtol.obj)
1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _strtoul already defined in LIBCMTD.lib(strtol.obj)
1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: __strtoi64 already defined in LIBCMTD.lib(strtoq.obj)
1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: __strtoui64 already defined in LIBCMTD.lib(strtoq.obj)
1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: __errno already defined in LIBCMTD.lib(dosmap.obj)
1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: __vsprintf_p already defined in LIBCMTD.lib(vsnprnc.obj)
...
...
etc.

谁能帮我找出我做错了什么?

【问题讨论】:

    标签: c++ visual-studio-2010 wxwidgets


    【解决方案1】:

    您正在为您的项目和库使用不同的 CRT 设置(静态与 DLL)。确保使用相同的选项(/MD[d]/MT[d])(重新)构建它们。

    【讨论】:

    • 要么这样做,要么改变你的库的构建方式。您可以将库更改为 /Md[d]。问题是它高度依赖于 MSVCR100 DLL。如果您尝试在另一台机器上运行您的可执行文件,则必须先安装 MSVCR100 DLL。
    • 是的,如果您使用 CRT DLL,您必须确保它们已安装在目标计算机上。但这是一个完全独立的(可能已经在其他地方回答过)的问题。
    • 对不起,我不明白你的意思是什么错误。如果您使用/MT[d] 构建所有内容(即both wxWidgets 您的应用程序),您应该不会有任何错误。你确实需要重建 wxWidgets,你做到了吗?
    【解决方案2】:

    此链接器错误有多种可能的原因。要检查的第一个地址是 MSDN:https://msdn.microsoft.com/en-us/library/ts7eyw4s.aspx

    什么是$(WXWIN),它与$(WXDIR284) 有何不同?看来,您两次包含 wxWidgets 路径...

    【讨论】:

      猜你喜欢
      • 2020-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多