Почему эта библиотека не связана с комментарием прагмы? - PullRequest
11 голосов
/ 17 февраля 2009

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

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

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

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

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

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

Ответы [ 4 ]

7 голосов
/ 20 марта 2009

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

#pragma comment(lib,"fmodvc")

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

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

Но теперь, когда я попал в ловушку мира C #, у меня больше не остается времени даже на программирование на C ++ ...

1 голос
/ 17 февраля 2009

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

0 голосов
/ 23 марта 2009

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

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

0 голосов
/ 19 марта 2009

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

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

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

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

...