2009-02-17 5 views
11

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

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

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

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

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

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

ответ

1

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

0

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

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

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

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

+1

Process Monitor собирается найти * статически связанные * библиотеки? –

+3

во время передачи, да. Во время ссылки линкер должен попытаться открыть файлы - procmon увидит это. –

7

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

#pragma comment(lib,"fmodvc") 

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

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

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

+1

Стюарт, я вернулся с этого поста, и я использовал # прагму, которую вы используете, и она работает. Вам просто нужно убедиться, что вы на самом деле ссылаетесь на правильный каталог. Я предполагаю, что ../ неверно, поскольку компоновщик работает из каталога $ (TargetDir) ... Надеюсь, это поможет. Дайте мне знать, если он все еще не работает, и я буду копать дальше даже ... – LarryF

+0

+1 для наблюдения за/nodefaultlib. Меня насторожило, что это заставит «#pragma comment (lib, ...)» работать. –

0

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

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