Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/32: Рейтинг темы: голосов - 32, средняя оценка - 4.69
174 / 170 / 19
Регистрация: 31.08.2010
Сообщений: 573
1

Компиляция DLL из командной строки

14.08.2011, 13:53. Показов 6579. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Пытаюсь скомпилировать библиотеку dll по примеру в книге "С++. Сборник рецептов", но выдается ошибка. Привожу код, выполняемые действия и ошибку:

==== Исходный код ====

george.hpp
C++
1
2
3
4
5
6
#ifndef GEORGE_HPP_INCLUDED
#define GEORGE_HPP_INCLUDED
 
void george(); // Печатает "George, "
 
#endif //GEORGE_HPP_INCLUDED
george.cpp
C++
1
2
3
4
5
6
#include <iostream>
#include "george.hpp"
 
void george() {
  std::cout << "George, ";
}
ringo.hpp
C++
1
2
3
4
5
6
#ifndef RINGO_HPP_INCLUDED
#define RINGO_HPP_INCLUDED
 
void ringo(); // Печатает "and Ringo\n"
 
#endif //RINGO_HPP_INCLUDED
ringo.cpp
C++
1
2
3
4
5
6
#include <iostream>
#include "ringo.hpp"
 
void ringo() {
  std::cout << "and Ringo" << std::endl;
}
georgeringo.hpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#ifndef GEORGERINGO_HPP_INCLUDED
#define GEORGERINGO_HPP_INCLUDED
 
// определение GEORGERINGO_DLL при сборке libgeorgeringo.dll
#if defined(_WIN32) && !defined(__GNUC__)
#  ifdef GEORGERINGO_DLL
#    define GEORGERINGO_DECL __declspec(dllexport)
#  else
#    define GEORGERINGO_DECL __declspec(dllimport)
#  endif
#endif // WIN32
 
#ifndef GEORGERINGO_DECL
#  define GEORGERINGO_DECL
#endif
 
// Печатает "George, and Ringo\n"
GEORGERINGO_DECL void georgeringo();
 
#endif //GEORGERINGO_HPP_INCLUDED
georgeringo.cpp
C++
1
2
3
4
5
6
#include <iostream>
#include "ringo.hpp"
 
void ringo() {
  std::cout << "and Ringo" << std::endl;
}
==== Командная строка (компилировал в Windows XP SP3, компилятор Visual C++ 2010 Express Edition)
$ vcvars32.bat
$ cl /c /nologo /EHsc /GR /Zc:forScope /Zc:wchar_t /Fegeorge george.cpp
$ cl /c /nologo /EHsc /GR /Zc:forScope /Zc:wchar_t /Feringo ringo.cpp
$ cl /c /nologo /EHsc /GR /Zc:forScope /Zc:wchar_t /Fegeorgeringo georgeringo.cpp

вот здесь выдает следующую ошибку
georgeringo.cpp
georgeringo.cpp(5) : warning C4273: georgeringo: несовместимая компоновка dll
<path>\georgeringo.hpp(18): см. предыдущее определение "georgeringo"

здесь <path> - путь к файлу

Объясните что это за ошибка и как с ней бороться
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.08.2011, 13:53
Ответы с готовыми решениями:

Компиляция DLL из командной строки
Нужно скомпилить ДЛЛ из командной строки. Когда копирую строку из Project-&gt;Settings-&gt;C/C++, т.е....

Компиляция срр файла из командной строки
Здравствуйте! Пытаюсь из командной строки скомпилировать файл, но выводит такую ошибку fatal...

Компиляция из командной строки
Я тут нашел tutorial как в C# компиллировать из командной строки: md C:\learncs cd C:\learncs ...

Компиляция из командной строки
Доброго времени суток. У меня к Вам вопрос по компиляции из коммандной строки. Делаю простенький...

5
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
14.08.2011, 14:09 2
Цитата Сообщение от TheAthlete Посмотреть сообщение
компиляция DLL из командной строки
а зачем это надо? что мешает скомпилировать в самой студии?
0
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
14.08.2011, 14:13 3
ну во-первых это не error - это warning
плюс чтото вы тут наворотили - что куда вы экспортируете, и почему в определении функций нет экспорта?
0
174 / 170 / 19
Регистрация: 31.08.2010
Сообщений: 573
14.08.2011, 14:43  [ТС] 4
Цитата Сообщение от Maxwe11 Посмотреть сообщение
а зачем это надо? что мешает скомпилировать в самой студии?
ничего не мешает. просто хочется разобраться, как все это работает вне студии. зная как это работает в командной строке, можно будет создать makefile либо использовать любую другую среду разработки, например Eclipse, Qt Creator

Плюс к тому c++, в отличии от того же Delphi, который немыслим без своей разработки (хотя и там вероятно можно компилировать с командной строки, но зачем), это прежде всего инструменты командной строки и бесчиленное количество систем сборок и сред разработки

Цитата Сообщение от alex_x_x Посмотреть сообщение
плюс чтото вы тут наворотили - что куда вы экспортируете, и почему в определении функций нет экспорта?
Сам не знаю, просто передрал с книги
После небольших мучений все получилось. Привожу изменненный код:

georgeringo.hpp
C++
1
2
3
4
5
6
7
#ifndef GEORGERINGO_HPP_INCLUDED
#define GEORGERINGO_HPP_INCLUDED
 
// Печатает "George, and Ringo\n"
void __declspec(dllexport) georgeringo();
 
#endif //GEORGERINGO_HPP_INCLUDED
georgeringo.cpp
C++
1
2
3
4
5
6
7
8
#include "george.hpp"
#include "ringo.hpp"
#include "georgeringo.hpp"
 
void __declspec(dllexport) georgeringo() {
  george();
  ringo();
}
И в заключение, чтобы собрать dll необходимо набрать в командной строке следующее
$ link /nologo /dll /out:libgeorgeringo.dll /implib:libgeorgeringo.lib george.obj ringo.obj georgeringo.obj
0
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
14.08.2011, 15:02 5
Цитата Сообщение от TheAthlete Посмотреть сообщение
void __declspec(dllexport) georgeringo();
ну а как собственно будет с этим работать программа, которая попытается загрузить вашу dll?
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
14.08.2011, 16:03 6
Цитата Сообщение от TheAthlete Посмотреть сообщение
просто хочется разобраться, как все это работает вне студии. зная как это работает в командной строке, можно будет создать makefile либо использовать любую другую среду разработки, например Eclipse, Qt Creator
gcc(mingw) для таких целей подходит лучше
0
14.08.2011, 16:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.08.2011, 16:03
Помогаю со студенческими работами здесь

Компиляция с командной строки
Не получается запустить с командной строки скомпилированый класс!!!! вот это пишу в командной...

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

Компиляция программы из командной строки
Всем привет, не знаю в чем причина. Скину фотки посмотрите. Всё перепробовал от перестановки jdk до...

Компиляция программы из командной строки
как скомпилировать программу написанную в обычном блокноте на cpp через командную строку?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru