Visual Studio 2010: компоновщик> Командная строка содержит ненужные .lib - PullRequest
0 голосов
/ 05 февраля 2012

Проблема, аналогичная этой: Как исключить файл .lib из аргумента командной строки компоновщика в VC ++

В основном я выполнял школьное задание, которое требует, чтобы моя программа на С ++ вызывала мою базу данных оракула. Я возился с Oracle OCCI и установил библиотеки "oraocci11.lib" "oraocci11d.lib" для включения во все проекты по умолчанию.

Я следовал настройкам, которые объяснены здесь

После этого я попытался скомпилировать пример проекта из того же источника для проверки 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 не помогли. Пожалуйста, помогите.

Ответы [ 3 ]

2 голосов
/ 29 июня 2012

У меня просто была эта проблема. Я использую Visual Studio 2010, и решение для меня было пойти в Свойства проекта-> Общие свойства и удалить ссылки на нежелательные библиотеки. Это избавило от записей командной строки для библиотек.

0 голосов
/ 06 февраля 2012

Я нашел решение, которое до сих пор работало на меня.

По крайней мере, мой VS2010 работает и компилирует мои предыдущие проекты.

Я только что запутался с таблицей свойств на моем компьютере.

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

Просто скопируйте и замените Microsoft.Cpp.x64.user.props внутри папки на Microsoft.Cpp.Win32.user.props

Спасибо за все входные данные, хотя

0 голосов
/ 05 февраля 2012

Вы не должны связывать библиотеки выпуска и отладки одновременно: например, oraocci11d.lib - отладочная версия; oraocci11.lib версия выпуска. Это запутает компоновщик (из-за одинаковых символов, доступных в обеих версиях, но он не сможет определить, какой из них вы хотите). Кроме того, я бы не стал добавлять такие библиотеки в стандартные библиотеки, с которыми нужно связываться (поскольку это может замедлить соединение).

...