![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
AmsTaFF |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 17.9.2009 Где: г. Москва Репутация: нет Всего: нет |
простите за глупый вопрос, облазил все что можно... но так и не смог найти ответ.
Создаю простую библиотеку: libmath.h
libmath.c
скомпилировал, дальше создаю консольный проект, чтобы использовать эту библиотеку usemathlib.c
добавляю в настройки Project->Properties->C/C++->General->Additional Include Dir. : F:\[ Education ]\C++ тренинг\libmath\libmath и Project->Properties->Linker->General->Additional Library dir. : F:\[ Education ]\C++ тренинг\libmath\Release при компиляции выдает такую ошибку: 1>math_user.obj : error LNK2001: unresolved external symbol "int __cdecl sum(int,int,float)" (?sum@@YAHHHM@Z) 1>F:\[ Education ]\C++ ЄЁхэшэу\math_user\Release\math_user.exe : fatal error LNK1120: 1 unresolved externals что я сделал не правильно или чего не сделал. Делал все по гайду в microsoft, но там показан пример на консольном приложении CLR, а у меня обычное консольное приложение |
||||||
|
|||||||
Леопольд |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
Надо скомпилировать статически/динамически линкуемую библиотеку. В винде файл имеет расширение .lib/.dll в NIX .o/.os?
Не знаю как с динамической библиотекой, но со статической её надо добавить в проект в IDE или указать в параметрах командной строки при запуске компилятора (который потом передаст её линкеру). Это сообщение отредактировал(а) Леопольд - 22.3.2010, 12:55 -------------------- вопросов больше чем ответов |
|||
|
||||
Леопольд |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
Если так, то, если ты работаешь в ИДЕ, надо добавить оба файла *.cpp в проект. Заметь, что теперь они компилируются по очереди, после чего, в процессе линковки, из них создаётся исполняемый файл. Это сообщение отредактировал(а) Леопольд - 22.3.2010, 12:56 -------------------- вопросов больше чем ответов |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
Одну директорию указывать мало, надо сам файл указать вот тут
Linker->Input->Additional Dependencies. |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
AmsTaFF, в хидере нужно перед декларацией функции писать extern "C", если функция у тебя реализована на языке С. Так как у С++ немного по другому организован алгоритм именования функций.
|
|||
|
||||
EvilsInterrupt |
|
|||
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: нет Всего: 9 |
To AmsTaFF :
В С и С++ компилятся исходные файлы, как правило *.c, *.cpp, но не факт, читай ниже. Чтобы скомпилировать проект, нужно компилятору подать исходные файлы проекта. Это можно выполнить следующими способами: 1) Создать make-файл, в нем указать все исходные файлы, все необходимые тулзы, в том числе и компилятор и что надо сделать. Далее запустив тулзу make или аналогичную, получить результат! 2) Либо воспользоваться средой разработки. К примеру MS Visual Stuidio. Которая все за тебя сделает сама! ;) Но это только видимость. Поговорим о MS Visual Studio. Не смотря на то что студиа многое может, ее нужно настраивать! Указывать где лежат файлы с инклудами, указывать линкеру файлы *.lib или указывать компилятору чего-нить. Чтобы тебе скомпилить в новом библиотеке код используемый из твоей библиотеки, ты должен: 1) указывать в местах использования ф-ций, классов, структур и т.д. #include <your_lib.h> . Этим самым ты говоришь как выглядят функции библоитеки 2) Добавить их в проект или прописать в make-файле. Этими действиями ты говоришь компиллеру как перейти из места вызова функции(клиентская часть) в саму реализацию функции(библиотека). Для того чтобы у тебя все запахало, вероятно, думаю ты забыл нажать правой кнопкой -> Add -> Exist or New и указать твой *.cpp файл , где исходный код функций библиотеки. ;) Это сообщение отредактировал(а) EvilsInterrupt - 22.3.2010, 14:04 |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
ещё в visual studio нужно в явном виде указывать тип вызова:
т.к. в проекте библиотеки у тебя может быть тип вызова по-умолчанию один, а в основном проекте - другой -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
AmsTaFF |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 17.9.2009 Где: г. Москва Репутация: нет Всего: нет |
2Леопольд
я хочу написать более сложную библиотеку, которая будет использовать в другом проекте... и столкнулся с проблемой, что не могу присоединить библиотеку в проекту, нужна именно статическа библиотека .lib 2EvilsInterrupt нужно именно библиотеку использовать, а не её исходные коды, если бы можно было исходники использовать, проблем бы не возникло. Спасибо за подробное объяснение ) 2bsa указал, спасибо 2azesmcar спасибо, указал - запустил и скомпилилось, проблема решена 2borisbn приму к сведению, спасибо |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Для VC:
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |