0

Самостоятельно обучаюсь языку c++ по книге Бьярне Страуструпа и столкнулся с проблемой на главе 12 - графический интерфейс.

Работал до этого в основном с компилятором mingw, но сейчас даже по советам из книги не получается заставить работать любую программу, даже тестовую для проверки библиотеки.

Изначально не мог скомпилировать библиотеку под mingw (под Visual Studio без проблем компилируется), нашёл вариант с MSYS2 (с установкой gcc, make, autoconf, automake), который у меня выдает ошибки и не доходит до компиляции. Единственный удачный вариант компиляции удался через Linux-подсистему в Win10 (при чём почему-то скомпилировалось 6, а не 7 файлов) и затем прописал в переменные среды пути к заголовочным файлам и скомпилированным библиотекам, т.к. "make install" так же не работает. Это до сих пор вызывает вопросы, но тем не менее посчитал этап пройденным.

Затем по совету из книги решил проверить библиотеку следующим кодом:

#include <FL/Fl.h>
#include <FL/Fl_Box.h>
#include <FL/Fl_Window.h>

int main() { Fl_Window window(200, 200, "Window title"); Fl_Box box(0, 0, 200, 200, "Hey, I mean, Hello, World!"); window.show(); return Fl::run(); }

Компилировал так:

"C:\Program Files (x86)\mingw-w64\x86_64-8.1.0-release-win32-seh-rt_v6-rev0\bin\g++.exe" -static -static-libgcc -static-libstdc++ -lfltk -std=c++11 -g -Os -s -Wall

Результат попытки компиляции следующий:

C:\<Путь к Temp>\ccq9dJde.o: In function `main':
D:/cpp/3.cpp_4GIT/1.Biarne_Lessons/1.glavy/glava12/fltk_test/main.cpp:10: undefined reference to `Fl_Window::Fl_Window(int, int, char const*)'
D:/cpp/3.cpp_4GIT/1.Biarne_Lessons/1.glavy/glava12/fltk_test/main.cpp:11: undefined reference to `Fl_Box::Fl_Box(int, int, int, int, char const*)'
D:/cpp/3.cpp_4GIT/1.Biarne_Lessons/1.glavy/glava12/fltk_test/main.cpp:12: undefined reference to `Fl_Window::show()'
D:/cpp/3.cpp_4GIT/1.Biarne_Lessons/1.glavy/glava12/fltk_test/main.cpp:13: undefined reference to `Fl::run()'
C:\<Путь к Temp>\ccq9dJde.o:C:/Program Files (x86)/mingw-w64/x86_64-8.1.0-release-win32-seh-rt_v6-rev0/include/FL/Fl_Box.h:34: undefined reference to `Fl_Widget::~Fl_Widget()'
C:\<Путь к Temp>\ccq9dJde.o: In function `main':
D:/cpp/3.cpp_4GIT/1.Biarne_Lessons/1.glavy/glava12/fltk_test/main.cpp:10: undefined reference to `Fl_Window::~Fl_Window()'
C:\<Путь к Temp>\ccq9dJde.o:C:/Program Files (x86)/mingw-w64/x86_64-8.1.0-release-win32-seh-rt_v6-rev0/include/FL/Fl_Box.h:34: undefined reference to `Fl_Widget::~Fl_Widget()'
C:\Users\A9828~1.BEL\AppData\Local\Temp\ccq9dJde.o: In function `main':
D:/cpp/3.cpp_4GIT/1.Biarne_Lessons/1.glavy/glava12/fltk_test/main.cpp:10: undefined reference to `Fl_Window::~Fl_Window()'
C:\<Путь к Temp>\ccq9dJde.o:main.cpp:(.rdata$.refptr._ZTV6Fl_Box[.refptr._ZTV6Fl_Box]+0x0): undefined reference to `vtable for Fl_Box'
collect2.exe: error: ld returned 1 exit status

После компиляции библиотек под Visual Studio покидал библиотеки и заголовочные в C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.31.31103 , прописал в параметрах Компоновщика проекта fltk.lib wsock32.lib comctl32.lib fltkjpeg.lib fltkimages.lib и исключил все стандартные библиотеки. Результат аналогичный предыдущему:

Ошибка  LNK1120 неразрешенных внешних элементов: 10 WindowsProject1 D:\cpp\3.cpp_4GIT\1.Biarne_Lessons\1.glavy\glava12\fltk_test\WindowsProject1\x64\Release\WindowsProject1.exe    1   
Ошибка  LNK2001 неразрешенный внешний символ __CxxFrameHandler4.    WindowsProject1 D:\cpp\3.cpp_4GIT\1.Biarne_Lessons\1.glavy\glava12\fltk_test\WindowsProject1\WindowsProject1.obj    1   
Ошибка  LNK2001 неразрешенный внешний символ __security_check_cookie.   WindowsProject1 D:\cpp\3.cpp_4GIT\1.Biarne_Lessons\1.glavy\glava12\fltk_test\WindowsProject1\WindowsProject1.obj    1   
Ошибка  LNK2001 неразрешенный внешний символ "public: virtual void __cdecl Fl_Window::show(void)" (?show@Fl_Window@@UEAAXXZ).   WindowsProject1 D:\cpp\3.cpp_4GIT\1.Biarne_Lessons\1.glavy\glava12\fltk_test\WindowsProject1\WindowsProject1.obj    1   
Ошибка  LNK2001 неразрешенный внешний символ "public: virtual __cdecl Fl_Window::~Fl_Window(void)" (??1Fl_Window@@UEAA@XZ). WindowsProject1 D:\cpp\3.cpp_4GIT\1.Biarne_Lessons\1.glavy\glava12\fltk_test\WindowsProject1\WindowsProject1.obj    1   
Ошибка  LNK2001 неразрешенный внешний символ "public: __cdecl Fl_Window::Fl_Window(int,int,char const *)" (??0Fl_Window@@QEAA@HHPEBD@Z).    WindowsProject1 D:\cpp\3.cpp_4GIT\1.Biarne_Lessons\1.glavy\glava12\fltk_test\WindowsProject1\WindowsProject1.obj    1   
Ошибка  LNK2001 неразрешенный внешний символ "public: static int __cdecl Fl::run(void)" (?run@Fl@@SAHXZ).   WindowsProject1 D:\cpp\3.cpp_4GIT\1.Biarne_Lessons\1.glavy\glava12\fltk_test\WindowsProject1\WindowsProject1.obj    1   
Ошибка  LNK2001 неразрешенный внешний символ "public: __cdecl Fl_Box::Fl_Box(int,int,int,int,char const *)" (??0Fl_Box@@QEAA@HHHHPEBD@Z).   WindowsProject1 D:\cpp\3.cpp_4GIT\1.Biarne_Lessons\1.glavy\glava12\fltk_test\WindowsProject1\WindowsProject1.obj    1   
Ошибка  LNK2001 неразрешенный внешний символ "public: virtual __cdecl Fl_Widget::~Fl_Widget(void)" (??1Fl_Widget@@UEAA@XZ). WindowsProject1 D:\cpp\3.cpp_4GIT\1.Biarne_Lessons\1.glavy\glava12\fltk_test\WindowsProject1\WindowsProject1.obj    1   
Ошибка  LNK2001 неразрешенный внешний символ __std_terminate.   WindowsProject1 D:\cpp\3.cpp_4GIT\1.Biarne_Lessons\1.glavy\glava12\fltk_test\WindowsProject1\WindowsProject1.obj    1   
Ошибка  LNK2001 неразрешенный внешний символ WinMainCRTStartup. WindowsProject1 D:\cpp\3.cpp_4GIT\1.Biarne_Lessons\1.glavy\glava12\fltk_test\WindowsProject1\LINK   1   

Теперь даже не представляю куда копать. Ничего не компилируется ещё и библиотеки требуемые для обучения требуют какой-то fltk.h которого нет ни в архиве, ни в заголовочных файлах библиотеки - соответственно примеры из главы также не получается скомпилировать.

Прошу помощи гуру ибо уже второй день застрял на попытках с этим всем разобраться

NExe
  • 1
  • "обучаюсь языку c++ по книге Бьярне Страуструпа" - выкинте ее и найдите что-нибудь получше. Файл fltk.h не имеет отношения к библиотеке fltk, это дополнение к книге. – user7860670 Apr 22 '22 at 13:44
  • всё таки хотелось бы найти решение проблемы. книга мне понравилась, но столкнулся вот с проблемой и прошу помощи – NExe Apr 22 '22 at 14:59
  • Так нужно просто чуточку погуглить https://github.com/BjarneStroustrup/Programming-_Principles_and_Practice_Using_Cpp/blob/master/fltk.h – KoVadim Apr 22 '22 at 21:28
  • Да уже нашёл, но это не решает проблемы, увы. Так пока и не получается скомпилировать, хоть заголовочные файлы fltk перелопачивай – NExe Apr 25 '22 at 07:07

0 Answers0