Почему эта библиотека не связана с комментарием прагмы?

Я использую Fmod в проекте, над которым я работаю в Visual С++ 2008. Если я включаю

../fmodapi375win/api/lib/fmodvc.lib

в Project- > Linker- > Input, он работает нормально, но по какой-то причине, если я использую

#pragma comment(lib,"../fmodapi375win/api/lib/fmodvc.lib")

вместо этого он работает так же, как если бы эта строка не была там: она строит без ошибок компоновщика, а затем вылетает из-за из миллиона исключений нарушения доступа.

Что происходит, и как я могу его исправить, чтобы я мог определить lib в коде?

Ответ 1

Я не думаю, что вы должны предоставить .lib в комментарии прагмы, но, я думаю, настоящая проблема в том, что вы вызываете комментарий по пути. Добавьте путь к вашим путям поиска lib, а затем просто используйте

#pragma comment(lib,"fmodvc")

У вас есть возможность использовать путь в этом комментарии, но уверены ли вы, что..\путь, который вы используете, является правильным путем во время ссылки? Также убедитесь, что вы НЕ компилируете с /nodefaultlib...

Сообщите мне, если это все еще не работает. Я использовал этот тип прагмы много, с большим успехом...

Но теперь, когда я в значительной степени пойман в ловушку в мире С#, я не получаю много времени, чтобы даже программировать на С++ больше...

Ответ 2

Лица могут быть связаны в другом порядке, поэтому символы разрешаются по-разному.

Ответ 3

Установите/VERBOSE в командной строке ссылки. В графическом интерфейсе вы можете сделать это на странице свойств проекта - добавьте в "Командная строка" node в Linker.

Затем он расскажет вам, как он разрешил каждую функцию - поиск функции, которую вы знаете, должен находиться в файле fmodvc.lib.

Еще одна задача - запустить PROCMON.EXE во время ссылки (предварительный фильтр, чтобы PATH CONTAINS fmodvc.lib) - затем ссылку. Он скажет вам точное местоположение, в котором он нашел файл (и если он когда-либо его искал). Получить PROCMON здесь: http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx

Наконец, если он связывает, но не загружает вашу библиотеку (или разрешает ссылки) - у вас может быть возможность принудительно установить связь, вы должны отключить ее. Это было бы /FORCE в разделе командной строки (например,/VERBOSE).

Ответ 4

Вы абсолютно уверены, что тот же самый файл lib в двух экземплярах?

Это может стать очень странным, если вы пропустите тот факт, что на вашем компьютере есть две версии файла. Я серьезно предлагаю вам искать свой диск для всех вхождений этого файла, просто чтобы проверить работоспособность.