【问题标题】:Visual Studio 2010: Linker > Command Line contains unneeded .libVisual Studio 2010:链接器 > 命令行包含不需要的 .lib
【发布时间】:2012-02-05 06:42:09
【问题描述】:

与此类似的问题:How to exclude .lib file from linker command line argument in VC++

基本上,我正在做一项学校作业,需要我的 c++ 程序调用我的 oracle 数据库。我在搞乱 Oracle OCCI 并将库 "oraocci11.lib" "oraocci11d.lib" 设置为默认包含在所有项目中。

我遵循了here解释的设置

之后我尝试从同一源编译一个示例项目来测试 OCCI,并得到如下错误:

error LNK2019: unresolved external symbol "public: static class
oracle::occi::Environment * __cdecl oracle::occi::Environment::createEnvironment(enum
oracle::occi::Environment::Mode,void *,void * (__cdecl*)(void *,unsigned int),void 
*     (__cdecl*)(void *,void *,unsigned int),void (__cdecl*)(void *,void *))"
(?createEnvironment@Environment@occi@oracle@@SAPAV123@W4Mode@123@PAXP6APAX1I@ZP6APAX11I@ZP6AX11@Z@Z)
referenced in function _main

我的默认链接器>命令行

/OUT:"C:\Users\Jem\Documents\Visual Studio 2010\Projects\sql\Debug\sql.exe"
/INCREMENTAL /NOLOGO "msvcprtd.lib" "kernel32.lib" "user32.lib" "gdi32.lib"
"winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" 
"uuid.lib" "odbc32.lib" "odbccp32.lib" "oraocci11.lib" "oraocci11d.lib" /MANIFEST 
/ManifestFile:"Debug\sql.exe.intermediate.manifest" /ALLOWISOLATION 
/MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"C:\Users\Jem\Documents
\Visual Studio 2010\Projects\sql\Debug\sql.pdb" /SUBSYSTEM:CONSOLE /PGD:"C:\Users
\Jem\Documents\Visual Studio 2010\Projects\sql\Debug\sql.pgd" /TLBID:1 /DYNAMICBASE 
/NXCOMPAT /MACHINE:X86 /ERRORREPORT:QUEUE 

如果您查看上面的属性,这两个库被包含在“oraocci11.lib”“oraocci11d.lib”中

我想从命令行中删除这两个,但该选项是只读的。

在对 OCCI 感到沮丧之后,我试图 制作一个简单的程序调用 main.cpp,里面只有“int main() { return 0; }”。 我构建它并得到它

LINK : fatal error LNK1104: cannot open file 'oraocci11.lib'

我包含了包含库的文件夹。 这一次,我明白了

LINK : fatal error LNK1104: cannot open file 'msvcprtd.lib'

我在我的笔记本上试过了,效果很好。我的笔记本 VS2010 是全新安装的 VS2010。

所以我认为这可能是命令行,因为在尝试使用返回 oraocci11.lib 错误的第一个设置进行构建之前,我已经排除了属性中的所有文件夹和库。

我已经完成了我在网上找到的所有可能的解决方案,但无济于事。 我已经尝试撤消所有设置(目录和附加依赖项) 即使安装和重新安装我的 VS2010 也无济于事。 请帮忙。

【问题讨论】:

  • 究竟是什么错误?编辑您的问题以包含它的副本和粘贴。
  • and set the libraries to be included to all projects by default。这就是它的来源,大概。你没有描述你做了什么。

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


【解决方案1】:

我刚遇到这个问题。我正在使用 Visual Studio 2010,我的解决方案是转到 Project properties->Common Properties 并删除对不需要的库的引用。这摆脱了库的命令行条目。

【讨论】:

    【解决方案2】:

    您不能同时链接发布库和调试库:例如oraocci11d.lib 是调试版本; oraocci11.lib 发布版本。它会使链接器感到困惑(由于两个版本中都提供了相同的符号,而它无法确定您想要哪一个)。此外,我不会将此类库添加到要链接的标准库中(因为它可能会减慢链接速度)。

    【讨论】:

    • 编译失败后才注意到。在我尝试撤消所有设置并且只包括 oraocci11d.lib 之后,我仍然无法让程序运行。我现在面临的问题是我什至无法运行简单的程序而不会出现上述链接器错误。
    • 还原所有更改,甚至不包含那个库,看看会发生什么(使用新的/空白项目)。
    • 我已恢复所有更改,已从依赖项中删除了两个库。这两个库“卡”在 Linker > Command Line(如上所示)的属性中,我似乎找不到删除它的方法。
    【解决方案3】:

    到目前为止,我找到了一个对我有用的解决方案。

    至少我的VS2010 正在工作和编译我以前的项目。

    我只是弄乱了我电脑上的属性表。

    C:\Users\%user%\AppData\Local\Microsoft\MSBuild\v4.0
    

    只需将文件夹内的Microsoft.Cpp.x64.user.props复制并替换为Microsoft.Cpp.Win32.user.props即可

    感谢大家的意见

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多