Правильно связывайте библиотеки в командной строкеC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Правильно связывайте библиотеки в командной строке

Сообщение Anonymous »

Предисловие: я новичок в C++ и только начинаю серьезно программировать.

Послепредисловие: я пытался опубликовать ссылку на функции/страницы. Я упоминаю об этом в этом посте, но Stack Overflow накричал на меня, потому что у меня недостаточно репутации, чтобы опубликовать более двух ссылок.

Я пытаюсь сделать несколько простые графические интерфейсы на C++ с помощью Windows API с использованием MinGW и командной строки. Я пытаюсь изменить фон окна, и одна из функций, которая помогает в этом, — это функция CreateSolidBrush. Для этой функции требуется библиотека gdi32, но каждый раз, когда я пытаюсь скомпилировать или связать ее с этой библиотекой, я получаю сообщение об ошибке типа «не могу найти эту библиотеку, отстой».

Страницы 1 и 2 предоставляют полезную информацию о функциях библиотеки MinGW. В сообщениях Stack Overflow № 5683058 и № 17031290 описываются вопросы/проблемы, похожие на мои. Я повсюду искал простой и прямой ответ о том, как связать файлы/библиотеки из других каталогов (особенно библиотек Windows), но мне не удалось реализовать знания с этих страниц. Возможно, ответ смотрит мне прямо в лицо, но мои доблестные усилия «увидеть кошку, нарисовать тигра» тщетны. Возможно, я ввожу неверный путь/имя (lib vs dll?), или, может быть, я совершенно упускаю из виду что-то более фундаментальное (отсутствует заголовок?). Одна команда, которую я пытался использовать:

g++ -LC:\WINDOWS\System32 -lgdi32 gui.cpp


но, похоже, это не работает (примечание: исходный файл с именем «gui.cpp»).

Вопрос 1. Для начала: какое обозначение/команда правильно использовать для ссылки на отдельные заголовочные/исходные файлы, которых нет в текущем каталоге?
Вопрос 2. Какова правильная запись/команда для ссылки на библиотеку, которая находится в текущем каталоге?

Вопрос 3. Какова правильная запись/команда для ссылки на библиотеку, которой нет в текущем каталоге? p>

Я понимаю, что на эти вопросы можно найти разные ответы на других страницах, но они часто смешиваются с указаниями относительно Visual Studio, Eclipse, Code::Blocks, и т. д. и поэтому непонятен новичкам, которые отказываются от роскоши IDE. Я был бы признателен за прямой ответ для вашего типичного, заурядного нуба. Заранее большое спасибо за любую помощь или рекомендации.

Я опубликую свой код, но думаю, что только пара из первых пяти строк имеет значение:

#include
#include

COLORREF desired_color = RGB(200,200,200);
HBRUSH hBrush = CreateSolidBrush(desired_color);

static char str_class_name[] = "MyClass";
static char str_titlebar[] = "My Window Title";
static int window_width = 300;
static int window_height = 300;

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

static HINSTANCE program_global_instance = NULL;

int WINAPI WinMain(HINSTANCE program_current_instance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
program_global_instance = program_current_instance;
WNDCLASSEX window_class;
HWND window_handle;
MSG window_message;

window_class.cbSize = sizeof(WNDCLASSEX); // size of struct; always set to size of WndClassEx
window_class.style = 0; // window style
window_class.lpfnWndProc = WndProc; // window callback procedure
window_class.cbClsExtra = 0; // extra memory to reserve for this class
window_class.cbWndExtra = 0; // extra memory to reserve per window
window_class.hInstance = program_global_instance; // handle for window instance
window_class.hIcon = LoadIcon(NULL, IDI_APPLICATION); // icon displayed when user presses ALT+TAB
window_class.hCursor = LoadCursor(NULL, IDC_ARROW); // cursor used in the program
window_class.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); // brush used to set background color
window_class.lpszMenuName = NULL; // menu resource name
window_class.lpszClassName = str_class_name; // name with which to identify class
window_class.hIconSm = LoadIcon(NULL, IDI_APPLICATION); // program icon shown in taskbar and top-left corner

if(!RegisterClassEx(&window_class)) {
MessageBox(0, "Error Registering Class!", "Error!", MB_ICONSTOP | MB_OK);
return 0;
}

window_handle = CreateWindowEx(
WS_EX_STATICEDGE, // dwExStyle: window style
str_class_name, // lpClassName: pointer to class name
str_titlebar, // lpWindowName: window titlebar
WS_OVERLAPPEDWINDOW, // dwStyle: window style
CW_USEDEFAULT, // x: horizontal starting position
CW_USEDEFAULT, // y: vertical starting position
window_width, // nWidth: window width
window_height, // nHeight: window height
NULL, // hWndParent: parent window handle (NULL for no parent)
NULL, // hMenu: menu handle (Null if not a child)
program_global_instance, // hInstance : current window instance
NULL // lpParam -Points to a value passed to the window through the CREATESTRUCT structure.
);

if (window_handle == NULL) {
MessageBox(0, "Error Creating Window!", "Error!", MB_ICONSTOP | MB_OK);
return 0;
}

ShowWindow(window_handle, nCmdShow);
UpdateWindow(window_handle);

while(GetMessage(&window_message, NULL, 0, 0)) {
TranslateMessage(&window_message);
DispatchMessage(&window_message);
}

return window_message.wParam;
}

// window_handle: window ID
// uMsg: window message
// wParam: additional message info; depends on uMsg value
// lParam: additional message info; depends on uMsg value
LRESULT CALLBACK WndProc(
HWND window_handle,
UINT Message,
WPARAM wParam,
LPARAM lParam
) {
switch(Message) {
case WM_CLOSE:
DestroyWindow(window_handle);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(window_handle, Message, wParam, lParam);
}
return 0;
}


Подробнее здесь: https://stackoverflow.com/questions/331 ... mmand-line
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»