与此类似的问题: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也无济于事。 请帮忙。
答案 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
感谢所有输入