powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Трудности компиляции gcc с сторонними динамическими библиотеками
24 сообщений из 24, страница 1 из 1
Трудности компиляции gcc с сторонними динамическими библиотеками
    #39961432
svd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всем привет.

Пытаюсь компилировать под MinGW проект с использованием OpenCV. OpenCV откомпилировал без проблем. Создал тестовый проект всего с одним файлом, исходники взяты из одного примера:

main3.cpp

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgcodecs/imgcodecs.hpp"
#include <iostream>

using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
  Mat im = imread(argc == 2 ? argv[1] : "lena.jpg", 1);
  if (im.empty())
  {
    cout << "Cannot open image!" << endl;
    return -1;
  }

  imshow("image", im);
  waitKey(0);

  return 0;
}



К нему Makefile

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
# Project: Proj400-v3
# Makefile created by Dev-C++ 5.11

CPP      = g++.exe
CC       = gcc.exe
WINDRES  = windres.exe
OBJ      = obj/main3.o
LINKOBJ  = obj/main3.o
LIBS     = -L"C:/RD/TMP/Dev-Cpp/MinGW64/lib32" -L"C:/RD/TMP/Work/entw/OCV-SVD/ocv4.0.0/lib" -lopencv_core400 -lopencv_imgcodecs400 -lopencv_highgui400 -m32
INCS     = -I"C:/RD/TMP/Dev-Cpp/MinGW64/include" -I"C:/RD/TMP/Dev-Cpp/MinGW64/x86_64-w64-mingw32/include" -I"C:/RD/TMP/Dev-Cpp/MinGW64/lib/gcc/x86_64-w64-mingw32/4.9.2/include" -I"C:/RD/TMP/Work/entw/OCV-SVD/ocv4.0.0/inc" -I"C:/RD/TMP/Work/entw/OCV-SVD/proj4.0.0.0"
CXXINCS  = -I"C:/RD/TMP/Work/entw/OCV-SVD/ocv4.0.0/inc" -I"C:/RD/TMP/Work/entw/OCV-SVD/proj4.0.0.0"
BIN      = obj/Proj400-v3.exe
CXXFLAGS = $(CXXINCS) -m32 -std=c++11 -lopencv_core400 -lopencv_imgcodecs400 -lopencv_highgui400
CFLAGS   = $(INCS) -m32
RM       = rm.exe -f

.PHONY: all all-before all-after clean clean-custom

all: all-before $(BIN) all-after

clean: clean-custom
	${RM} $(OBJ) $(BIN)

$(BIN): $(OBJ)
	$(CPP) $(LINKOBJ) -o $(BIN) $(LIBS)

obj/main3.o: main3.cpp
	$(CPP) -c main3.cpp -o obj/main3.o $(CXXFLAGS)




Все компилится и собирается без ошибок и прекрасно работает.
Пытаюсь усложнить проект, добавляю еще один файл second3.cpp
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/imgproc/imgproc_c.h>


extern "C" {
}





От него Makefile
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
# Project: Proj400-v3
# Makefile created by Dev-C++ 5.11

CPP      = g++.exe
CC       = gcc.exe
WINDRES  = windres.exe
OBJ      = obj/main3.o obj/second3.o
LINKOBJ  = obj/main3.o obj/second3.o
LIBS     = -L"C:/RD/TMP/Dev-Cpp/MinGW64/lib32" -L"C:/RD/TMP/Work/entw/OCV-SVD/ocv4.0.0/lib" -lopencv_core400 -lopencv_imgcodecs400 -lopencv_highgui400 -m32
INCS     = -I"C:/RD/TMP/Dev-Cpp/MinGW64/include" -I"C:/RD/TMP/Dev-Cpp/MinGW64/x86_64-w64-mingw32/include" -I"C:/RD/TMP/Dev-Cpp/MinGW64/lib/gcc/x86_64-w64-mingw32/4.9.2/include" -I"C:/RD/TMP/Work/entw/OCV-SVD/ocv4.0.0/inc" -I"C:/RD/TMP/Work/entw/OCV-SVD/proj4.0.0.0"
CXXINCS  = -I"C:/RD/TMP/Work/entw/OCV-SVD/ocv4.0.0/inc" -I"C:/RD/TMP/Work/entw/OCV-SVD/proj4.0.0.0"
BIN      = obj/Proj400-v3.exe
CXXFLAGS = $(CXXINCS) -m32 -std=c++11 -lopencv_core400 -lopencv_imgcodecs400 -lopencv_highgui400
CFLAGS   = $(INCS) -m32
RM       = rm.exe -f

.PHONY: all all-before all-after clean clean-custom

all: all-before $(BIN) all-after

clean: clean-custom
	${RM} $(OBJ) $(BIN)

$(BIN): $(OBJ)
	$(CPP) $(LINKOBJ) -o $(BIN) $(LIBS)

obj/main3.o: main3.cpp
	$(CPP) -c main3.cpp -o obj/main3.o $(CXXFLAGS)

obj/second3.o: second3.cpp
	$(CPP) -c second3.cpp -o obj/second3.o $(CXXFLAGS) 




При компиляции выдаются следующие ошибки:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
- Command: mingw32-make.exe -f "C:\RD\TMP\Work\entw\OCV-SVD\proj4.0.0.0\Makefile.win" all

g++.exe obj/main3.o obj/second3.o -o obj/Proj400-v3.exe -L"C:/RD/TMP/Dev-Cpp/MinGW64/lib32" -L"C:/RD/TMP/Work/entw/OCV-SVD/ocv4.0.0/lib" -lopencv_core400 -lopencv_imgcodecs400 -lopencv_highgui400 -m32

obj/main3.o:main3.cpp:(.text+0xc3): undefined reference to `cv::imread(std::string const&, int)'
obj/main3.o:main3.cpp:(.text+0x181): undefined reference to `cv::imshow(std::string const&, cv::_InputArray const&)'
collect2.exe: error: ld returned 1 exit status

C:\RD\TMP\Work\entw\OCV-SVD\proj4.0.0.0\Makefile.win:25: recipe for target 'obj/Proj400-v3.exe' failed

mingw32-make.exe: *** [obj/Proj400-v3.exe] Error 1




Вот никак не могу понять, что мешает в новом файле? Так как опыта рабоы с gcc у меня не особо много, то разобраться с этим артефактом не могу сам.
...
Рейтинг: 0 / 0
Трудности компиляции gcc с сторонними динамическими библиотеками
    #39961434
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svd,
А почему в студии проект не делать?
...
Рейтинг: 0 / 0
Трудности компиляции gcc с сторонними динамическими библиотеками
    #39961437
svd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблемы с правами установки студии на данном компе. Выбрал альтернативу с работой из командной строки.
...
Рейтинг: 0 / 0
Трудности компиляции gcc с сторонними динамическими библиотеками
    #39961439
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svd,
Ужос. В каких только условиях наш брат не работает.
...
Рейтинг: 0 / 0
Трудности компиляции gcc с сторонними динамическими библиотеками
    #39961484
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svd, кроме заголовочных файлов в dev пакетах есть ещё ".a" файлы - статические библиотеки, которые используются как заглушки, осуществляющие динамическую линковку в рантайме. Их назначение такое же, как у ".lib" файлов в VS. Также допускаю, что ты не используешь утилиту pkg-config для доставки компилятору правильных путей к библиотекам. На этом мои вангования и экстрасенсорные возможности закончились.
Что у тебя за сборка утилит MinGW - TDM или MSYS2?
...
Рейтинг: 0 / 0
Трудности компиляции gcc с сторонними динамическими библиотеками
    #39961499
svd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

Если посмотреть в Makefile, то можно увидеть путь к библиотекам в том числе и статическим (*.a).

Pkg-config, как я понимаю, это случай линукса. А. MinGW уже в среде Windows.

В общем изначально всю басню пытался скомпилиррвать с помощью Dev-C++. Там есть покет версия. Там все конфигурации только с TDM (что это такое не в курсах. Знаю что Msys это аналог башевской оболочки). Dev-C++ сгенерировал Makefile. Как только файл единственный в проекте, то все замечательно. Появляется больше файлов - линковка рвется.

Такая же беда если делаю компиляцию и линковку ручками в консоли. Точнее даже так: если установить когфигурацию на один файл в проекте и при этом оставить в папке, где хранятся объектные файлы какой то другой, неважно какой и скаким именем (этого имени даже нет в Makefile), то линковка обрушится.

При желании могу где-нибудь оставить проект для теста: нужно будет только пути поправить.
...
Рейтинг: 0 / 0
Трудности компиляции gcc с сторонними динамическими библиотеками
    #39961529
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svd
Pkg-config, как я понимаю, это случай линукса. А. MinGW уже в среде Windows.
pkg-config, это просто bash скрипт, который берёт информацию об установленных dev файлах из текстовых файлов данных, которые появляются в результате установки dev пакетов или сборки и установки из исходников. Естественно, что этот скрипт есть и в MSYS2 и лучше пользоваться им. Я бы вообще посоветовал для сборки поставить MSYS2 с двумя разными toolchain'ами GNUC'а - как MinGW32, так и MinGW64. У меня тоже не получалось собрать make'ом 32 разрядное приложение, скомпилированное GNUC'ом из MinGW64 с опцией "m32". Для сборки 32 и 64 приходится использовать разные toolchain'ы.
...
Рейтинг: 0 / 0
Трудности компиляции gcc с сторонними динамическими библиотеками
    #39961537
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svd, ко всему прочему, в репозитории MSYS2 уже есть пакет "mingw-w64-i686-opencv" версии 4.2.0, установка которого подтянет все необходимые ему зависимости.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
$ pacman -S mingw-w64-i686-opencv
разрешение зависимостей...
проверка конфликтов...

Пакеты (28) mingw-w64-i686-SDL2-2.0.10-1  mingw-w64-i686-ceres-solver-1.14.0-4  mingw-w64-i686-cppunit-1.15.1-1
            mingw-w64-i686-eigen3-3.3.7-1  mingw-w64-i686-freeimage-3.18.0-3  mingw-w64-i686-gflags-2.2.2-2
            mingw-w64-i686-glog-0.4.0-2  mingw-w64-i686-glsl-optimizer-git-r66914.9a2852138d-1
            mingw-w64-i686-hdf5-1.10.5-1  mingw-w64-i686-hlsl2glsl-git-r848.957cd20-1  mingw-w64-i686-ilmbase-2.4.1-1
            mingw-w64-i686-intel-tbb-1~2020.1-2  mingw-w64-i686-jxrlib-1.1-3  mingw-w64-i686-leptonica-1.79.0-1
            mingw-w64-i686-libraw-0.19.5-1  mingw-w64-i686-libunwind-9.0.1-1  mingw-w64-i686-metis-5.1.0-3
            mingw-w64-i686-ogre3d-1.12.2-1  mingw-w64-i686-openblas-0.3.8-1  mingw-w64-i686-openexr-2.4.1-1
            mingw-w64-i686-openjpeg2-2.3.1-1  mingw-w64-i686-protobuf-3.11.4-1  mingw-w64-i686-suitesparse-5.7.1-1
            mingw-w64-i686-szip-2.1.1-2  mingw-w64-i686-tesseract-ocr-4.1.1-1  mingw-w64-i686-tinyxml-2.6.2-4
            mingw-w64-i686-uasm-v2.50-1  mingw-w64-i686-opencv-4.2.0-1

Будет загружено:  170.00 MiB
Будет установлено:  571.81 MiB
...
Рейтинг: 0 / 0
Трудности компиляции gcc с сторонними динамическими библиотеками
    #39961540
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svd,

Поставь линукс, делай там кросс-компиляцию с mingw и не люби себе мозг.
...
Рейтинг: 0 / 0
Трудности компиляции gcc с сторонними динамическими библиотеками
    #39961543
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster, возиться с отладкой лучше на целевой системе.
...
Рейтинг: 0 / 0
Трудности компиляции gcc с сторонними динамическими библиотеками
    #39961544
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

Ну так винду в виртуалку и вперёд.
...
Рейтинг: 0 / 0
Трудности компиляции gcc с сторонними динамическими библиотеками
    #39961548
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,
Автору не разрешено ничего ставить
...
Рейтинг: 0 / 0
Трудности компиляции gcc с сторонними динамическими библиотеками
    #39961553
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
QEMU/win работает без всякой установки. Медленно, да.
...
Рейтинг: 0 / 0
Трудности компиляции gcc с сторонними динамическими библиотеками
    #39961557
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

Ну зашибись. А работать как?
...
Рейтинг: 0 / 0
Трудности компиляции gcc с сторонними динамическими библиотеками
    #39961561
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
PetroNotC Sharp,
Ну зашибись. А работать как?

ТС хотелки засунул и начал писать код в notepad.
Он выше написал.
...
Рейтинг: 0 / 0
Трудности компиляции gcc с сторонними динамическими библиотеками
    #39961562
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
crutchmaster, возиться с отладкой лучше на целевой системе.
а что у него целевая?
Вроде про кроссплатформенность приложения он не говорил.
...
Рейтинг: 0 / 0
Трудности компиляции gcc с сторонними динамическими библиотеками
    #39961569
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp, очевидно венда.
...
Рейтинг: 0 / 0
Трудности компиляции gcc с сторонними динамическими библиотеками
    #39961574
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОК
Только винда +
svd
Проблемы с правами установки студии на данном компе. Выбрал альтернативу с работой из командной строки.
...
Рейтинг: 0 / 0
Трудности компиляции gcc с сторонними динамическими библиотеками
    #39961597
svd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

Можете про этот пакет по подробнее написать, что нужно делать? Хоть в Dev-C++ и стоит TDM, но в Makefile используются команды типа rm. Поэтому я как то был уверен, что MSYS уже из коробки. Судя по описанному примеру с packman, по вызову, он используется в каком то линуксе. Подозреваю, что с rpm-пакетами. Вчера только переустновил MinGW на более новый. Оказалось, что в ней даже нет команды nm.
...
Рейтинг: 0 / 0
Трудности компиляции gcc с сторонними динамическими библиотеками
    #39961599
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svd,

pacman - это арч. Посмотри в сторону cygwin.
...
Рейтинг: 0 / 0
Трудности компиляции gcc с сторонними динамическими библиотеками
    #39961623
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svd, рассказывать особо нечего... Всё изложено в документации. Качаете и ставите "msys2-i686-20190524.exe" или "msys2-x86_64-20190524.exe" (если венда позволяет) в соответствии с документацией "MSYS2 Installation" .

Затем заходите в MSYS2, ставите и настраиваете пакеты и инструментарий в соответствии с документацией "MSYS2 introduction" . На сколько я помню, в вендовую системную переменную окружения PATH надо добавить путь до утилит, типа "c:\msys2\usr\bin\".

В остальном всё тоже самое, что под Линухом. Собственно, окружение MSYS2 для этого и создано.
Далее смотрите список пакетов в репозитории MSYS . Если нужны оконные фреймворки, там есть и Qt, и wxWidgets, и GTK+.
...
Рейтинг: 0 / 0
Трудности компиляции gcc с сторонними динамическими библиотеками
    #39961634
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svd, в качестве IDE можете попробовать сборку CodeBlocks "nonadmin" или "nosetup".
...
Рейтинг: 0 / 0
Трудности компиляции gcc с сторонними динамическими библиотеками
    #39961651
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Столько наворотили, а человеку всего-то надо найти какая библиотека экспортирует данные
функции... nm | grep
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Трудности компиляции gcc с сторонними динамическими библиотеками
    #39961754
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю. На проект это не тянет. Какой-то макет. Я надеюсь что автору действительно нужена
библиотека машинного зрения. И не для того чтобы из jpg взять палитру или там сконвертить.

P.S. Из пушки по мелким птичкам...
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Трудности компиляции gcc с сторонними динамическими библиотеками
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]