Я пытаюсь кросс-компилировать некоторые программы на C / C ++, которые я написал для Linux для Windows.У меня был большой опыт использования GCC и MSVC.
Обычно при компиляции программы с использованием gcc можно использовать аргумент -l linker, чтобы указать библиотеку для ссылки.Кажется, что это не работает должным образом при использовании компоновщика MingW-gcc.
Версия GCC: i586-mingw32msvc-gcc (GCC) 4.4.4
При компоновке программы, которая использует (например, GTK + или libpng, libz,и т. д.), используя что-то вроде:
i586-mingw32msvc-gcc -mwindows -L/opt/xcompile-win32/lib -lmylib -lmylib2 myprog.o -o myprog.exe
Дает многочисленные ошибки о неопределенных ссылках на библиотечные функции.Однако, если я укажу библиотеки как дополнительные объекты, подобные этому:
i586-mingw32msvc-gcc -mwindows -L/opt/xcompile-win32/lib /opt/xcompile-win32/lib/libmylib.a /opt/xcompile-win32/lib/libmylib2.a myprog.o -o myprog.exe
Все работает отлично, и результирующая программа работает отлично!У меня такой вопрос: есть ли способ заставить работать правильные аргументы библиотеки -l?Этот метод кажется немного громоздким!Кажется, я не могу найти в Интернете ничего, что решает эту проблему.Спасибо!
Редактировать:
Чтобы уточнить: порядок аргументов библиотеки в командной строке не имеет значения.Кроме того, программа прекрасно компилируется в Linux (gcc), используя только аргументы -l.Фактическая команда ниже:
i586-mingw32msvc-gcc -mwindows -o win32/vmclient.exe win32/gtk_test.o \
-L/opt/xcompile-win32/lib -latk-1.0 -lpangoft2-1.0 -lpangocairo-1.0 \
-lgdk_pixbuf-2.0 -lm -lcairo -lpng12 -lpango-1.0 -lfreetype -lfontconfig \
-lgmodule-2.0 -lgthread-2.0 -lglib-2.0
win32/gtk_test.o:gtk_test.c:(.text+0x37): undefined reference to `_gtk_init_abi_check'
(и куча похожих ошибок).Программа прекрасно компилируется для Win32 (используя i586-mingw32msvc-gcc) при прямой ссылке на файлы библиотеки .a в том же порядке.