VS2005: unresolved external symbol
Компилировал библиотеку этим же компилятором?
свою программу - из среды vs2005.
Error 38 error LNK2019: unresolved external symbol "void __cdecl glp_lpx_delete_prob(struct LPX *)" (?glp_lpx_d@@@Z) referenced in function _main prototypeGLPK.objтакая ошибка может возникнуть что компилятор не правильно имя генерит.
напиши как ты функцию в либине объявляешь
#define lpx_delete_prob glp_lpx_delete_prob
...
void lpx_delete_prob(LPX *lp);
В c-шном то же самое:
void lpx_delete_prob(LPX *lp)
{
...
имя у нее будет _glp_lpx_d{магический набор цифр и букв} или что-то такое
extern "C" void __declspec(dllexport) __stdcall somefuncname(int k)
и прописыванием имя в файле .def
для либин читать нужно
ваще-та, если файл компилируется как исходник на C (а такое по умолчанию для файлов с расширением .c то манглинга имен не происходит, и в либе будут нормальные красивые имена.
зато, когда чувак пытается юзать эти функции из C++-файла, линкер ищет по'mangle'нные имена. Т.о. в .h-шниках либы все-таки надо писать
extern "C", но не для сборки либы, а для сборки использующего либу проекта.
dllexport'ов и def тут не надо, кажется.
с плюсами манглинг происходит.
при компиляции C++-кода MSVC манглит имена (если не extern "C" при сборке C-кода - нет.
я просто на Си под мсвц ни разу не писал.
вопрос к автору треда в либине функция присутствует?
а ты это с чего взял?Самое время попробовать
я просто на Си под мсвц ни разу не писал.
![](/images/graemlins/smile.gif)
я только что проверял
![](/images/graemlins/smile.gif)
так что поведение msvc вполне логично в этом случае.
Я пробовал все исходники переименовать в срр и добавить в проект.
Та же ошибка.
![](/images/graemlins/smile.gif)
Очень жаль, если по каким-либо причинам это невозможно.
там простейшая программа - /examples/sample.c
![](/images/graemlins/laugh.gif)
![](/images/graemlins/laugh.gif)
Можно обойтись даже без модификации заголовочных файлов:
extern "C" {
#include "glpk.h"
}
, - спасибо.
Оставить комментарий
Dmitriy82
В программе я использую стороннюю библиотеку, предварительноскомпилированную по инструкции командой nmake.
Подключается она директивой
#pragma comment( lib, "glpk.lib"
а также просто добавлена в проект.
При линковке выводится соответствующая ошибка. Подозреваю, что
дело не в библиотеке (ранее та же самая проблема была
с библиотекой векторов от nvidia). Кстати, "решить" можно
было путем добавления в проект исходников всей библиотеки.
Что я делаю неправильно?
Error 38 error LNK2019: unresolved external symbol "void __cdecl glp_lpx_delete_prob(struct LPX *)" (?glp_lpx_d@@@Z) referenced in function _main prototypeGLPK.obj