2013-11-13 1 views
1

Я создал стандартное приложение Windows с VS 2012 Pro. Просто main.cpp выглядит так:linking vs 2012 C++ GDAL

#include "gdal_priv.h" 
#include "cpl_conv.h" 

int main(int argc, char* argv[]) 
{ 
    GDALAllRegister(); 

    return 0; 
} 

Я правильно установил путь включения. У меня есть gdal_i.lib в моем Linker -> Input -> Additional Dependencies.

Link выдает следующее сообщение:

1> main.obj: ошибка LNK2019: неразрешенный внешний символ _GDALAllRegister @ 0 ссылается функция _main

(A ставриды других символов являются отсутствует, но это должно быть легко.)

Я использовал dumpbin и GDALAllRegister появляется в экспортированных символах. Он отображается как «GDALAllRegister», а не как «_GDALAllRegister @ 0».

Я попытался загрузить и использовать конструкцию dev, а также сам. Те же результаты.

Я просто знаю, что это что-то простое, но я полностью смущаюсь здесь. Что я сделал не так?

Спасибо.

-reilly.

+0

_GDALAllRegister @ 0 - это то, как компилятор выбрал псевдоним конструктора. Я действительно не знаю, почему это не связывание, но вы можете попробовать использовать фиксированный путь, чтобы увидеть, будет ли он строить, т.е. #inlcude "c: /pathto/cpl_conv.h" – thermite

+0

Какова ваша конвенция о звонках в C++ -> Дополнительно? – manuell

ответ

0

Такая ошибка типична для несоответствия «Calling Convention» между EXE и LIB.

Проверьте у вас есть __cdecl (/ Gd) в разделе "Конфигурация Свойства" -> C++ -> Advanced -> "Вызов конвенции"

1

Я сказал, что это было просто и глупо, и это было.

У меня был менеджер по сборке, настроенный на сборку 32 бит.

Еще 4 часа моей жизни Я никогда не вернусь.

Благодаря Manuell за его предложение. Это заставило меня посмотреть в другом направлении, и я нашел его.

Сообщ. Это из-за усталости программирования.

-reilly.