Visual Studio 2010:链接器>命令行包含不需要的.lib

时间:2012-02-05 06:42:09

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

与此类似的问题: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感到沮丧之后,我尝试了  使用“int main(){return 0;}”在一个简单的程序中调用main.cpp。 我建立了它,我得到了这个

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

我包含了包含库的文件夹。 这一次,我得到了这个

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

我已经在我的笔记本上尝试过并且工作正常。我的笔记本VS2010是VS2010的全新安装。

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

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

您不能同时链接发布和调试库:例如oraocci11d.lib是调试版本; oraocci11.lib发布版本。它会混淆链接器(由于两个版本中都有相同的符号,但它无法确定您想要哪个符号)。另外,我不会将这些库添加到要链接的标准库中(因为它可能会减慢链接速度)。

答案 2 :(得分:0)

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

至少我的VS2010正在运作并编译我以前的项目。

我刚刚在计算机上弄乱了属性表。

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

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

即可

感谢所有输入