Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Трудности компиляции gcc с сторонними динамическими библиотеками / 24 сообщений из 24, страница 1 из 1
24.05.2020, 21:48
    #39961432
svd
svd
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Трудности компиляции gcc с сторонними динамическими библиотеками
всем привет.

Пытаюсь компилировать под 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
24.05.2020, 21:51
    #39961434
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Трудности компиляции gcc с сторонними динамическими библиотеками
svd,
А почему в студии проект не делать?
...
Рейтинг: 0 / 0
24.05.2020, 22:02
    #39961437
svd
svd
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Трудности компиляции gcc с сторонними динамическими библиотеками
Проблемы с правами установки студии на данном компе. Выбрал альтернативу с работой из командной строки.
...
Рейтинг: 0 / 0
24.05.2020, 22:07
    #39961439
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Трудности компиляции gcc с сторонними динамическими библиотеками
svd,
Ужос. В каких только условиях наш брат не работает.
...
Рейтинг: 0 / 0
25.05.2020, 01:29
    #39961484
rdb_dev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Трудности компиляции gcc с сторонними динамическими библиотеками
svd, кроме заголовочных файлов в dev пакетах есть ещё ".a" файлы - статические библиотеки, которые используются как заглушки, осуществляющие динамическую линковку в рантайме. Их назначение такое же, как у ".lib" файлов в VS. Также допускаю, что ты не используешь утилиту pkg-config для доставки компилятору правильных путей к библиотекам. На этом мои вангования и экстрасенсорные возможности закончились.
Что у тебя за сборка утилит MinGW - TDM или MSYS2?
...
Рейтинг: 0 / 0
25.05.2020, 03:31
    #39961499
svd
svd
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Трудности компиляции gcc с сторонними динамическими библиотеками
rdb_dev,

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

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

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

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

При желании могу где-нибудь оставить проект для теста: нужно будет только пути поправить.
...
Рейтинг: 0 / 0
25.05.2020, 09:10
    #39961529
rdb_dev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Трудности компиляции gcc с сторонними динамическими библиотеками
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
25.05.2020, 09:45
    #39961537
rdb_dev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Трудности компиляции gcc с сторонними динамическими библиотеками
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
25.05.2020, 09:50
    #39961540
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Трудности компиляции gcc с сторонними динамическими библиотеками
svd,

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

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

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

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

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

pacman - это арч. Посмотри в сторону cygwin.
...
Рейтинг: 0 / 0
25.05.2020, 11:51
    #39961623
rdb_dev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Трудности компиляции gcc с сторонними динамическими библиотеками
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
25.05.2020, 12:17
    #39961634
rdb_dev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Трудности компиляции gcc с сторонними динамическими библиотеками
svd, в качестве IDE можете попробовать сборку CodeBlocks "nonadmin" или "nosetup".
...
Рейтинг: 0 / 0
25.05.2020, 12:49
    #39961651
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Трудности компиляции gcc с сторонними динамическими библиотеками
Столько наворотили, а человеку всего-то надо найти какая библиотека экспортирует данные
функции... nm | grep
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25.05.2020, 16:04
    #39961754
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Трудности компиляции gcc с сторонними динамическими библиотеками
Не знаю. На проект это не тянет. Какой-то макет. Я надеюсь что автору действительно нужена
библиотека машинного зрения. И не для того чтобы из jpg взять палитру или там сконвертить.

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


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