Overview
I am attempting to convert a C++ project from a Visual Studio solution to a makefile project (using g++), as a first step to supporting multiple platforms with ease. This project requires the Simple DirectMedia Layer 2 (SDL2) and SDL_image libraries. The project previously compiled without errors, and I have since corrected any errors halting the g++ compiler. I am still using Windows x64 and MinGW x64 at this point.
Problem
When linking, g++ throws errors as though there is something wrong with the SDL2 library, claiming that all functions of SDL2 can't be found. However, I know it is finding the libraries, because when I provide an incorrect name or path, I get an explicit error.
Here is my new makefile, apologies if it isn't up to standard:
# Source files
SRC_ENTITIES = Entity_Block.cpp Entity_Controller.cpp Entity_Cursor.cpp Entity_GreenEye.cpp Entity_Harry.cpp
SRC_ENGINE = Game.cpp Sound.cpp SoundManager.cpp Sprite.cpp Texture.cpp TextureManager.cpp Entity.cpp EntityManager.cpp
SRC_ENTRY = main.cpp
# Source and destination
SOURCE = $(SRC_ENTITIES) $(SRC_ENGINE) $(SRC_ENTRY)
DEST = crystal_engine.bin
# Compiler options
OUTPUT = -o $(DEST)
INCLUDES = -I . -I.\include\windows\SDL2-devel-2.0.4-mingw\SDL2-2.0.4\x86_64-w64-mingw32\include\SDL2 -I.\include\windows\SDL2_image-devel-2.0.1-mingw\SDL2_image-2.0.1\x86_64-w64-mingw32\include\SDL2
LIBPATHS = -L.\include\windows\SDL2-devel-2.0.4-mingw\SDL2-2.0.4\x86_64-w64-mingw32\lib -L.\include\windows\SDL2_image-devel-2.0.1-mingw\SDL2_image-2.0.1\x86_64-w64-mingw32\lib
LIBRARIES = -lSDL2 -lSDL2main -lSDL2_image
STANDARD = -std=c++0x
FLAGS = -Wall
default:
echo No task selected
compile:
g++ $(STANDARD) $(INCLUDES) $(FLAGS) $(SOURCE) $(OUTPUT) $(LIBPATHS) $(LIBRARIES)
run:
./$(DEST)
run_win:
$(DEST)
Therefor the command line currently looks like this:
g++ -std=c++0x -I . -I.\include\windows\SDL2-devel-2.0.4-mingw\SDL2-2.0.4\x86_64-w64-mingw32\include\SDL2 -I.\include\windows\SDL2_image-devel-2.0.1-mingw\SDL2_image-2.0.1\x86_64-w64-mingw32\include\SDL2 -Wall Entity_Block.cpp Entity_Controller.cpp Entity_Cursor.cpp Entity_GreenEye.cpp Entity_Harry.cpp Game.cpp Sound.cpp SoundManager.cpp Sprite.cpp Texture.cpp TextureManager.cpp Entity.cpp EntityManager.cpp main.cpp -o crystal_engine.bin -L.\include\windows\SDL2-devel-2.0.4-mingw\SDL2-2.0.4\x86_64-w64-mingw32\lib -L.\include\windows\SDL2_image-devel-2.0.1-mingw\SDL2_image-2.0.1\x86_64-w64-mingw32\lib -lSDL2 -lSDL2main -lSDL2_image
Disregarding warnings (removing -Wall), the output of the compile looks like this:
C:\Users\[...]\ccSkHjgE.o:Game.cpp:(.text+0x169): undefined reference to `SDL_GetTicks'
C:\Users\[...]\ccSkHjgE.o:Game.cpp:(.text+0x2b4): undefined reference to `SDL_GetMouseState'
C:\Users\[...]\ccSkHjgE.o:Game.cpp:(.text+0x2c2): undefined reference to `SDL_PollEvent'
C:\Users\[...]\ccSkHjgE.o:Game.cpp:(.text+0x2d0): undefined reference to `SDL_GetTicks'
C:\Users\[...]\ccSkHjgE.o:Game.cpp:(.text+0x363): undefined reference to `SDL_GetTicks'
C:\Users\[...]\ccSkHjgE.o:Game.cpp:(.text+0x3ef): undefined reference to `SDL_GetTicks'
C:\Users\[...]\ccSkHjgE.o:Game.cpp:(.text+0x46c): undefined reference to `SDL_GetTicks'
C:\Users\[...]\ccSkHjgE.o:Game.cpp:(.text+0x4e3): undefined reference to `SDL_RenderClear'
C:\Users\[...]\ccSkHjgE.o:Game.cpp:(.text+0x4fd): undefined reference to `SDL_RenderPresent'
C:\Users\[...]\ccSkHjgE.o:Game.cpp:(.text+0x597): undefined reference to `SDL_ShowCursor'
C:\Users\[...]\ccSkHjgE.o:Game.cpp:(.text+0x5b1): undefined reference to `SDL_Init'
C:\Users\[...]\ccSkHjgE.o:Game.cpp:(.text+0x633): undefined reference to `SDL_CreateRenderer'
C:\Users\[...]\ccSkHjgE.o:Game.cpp:(.text+0x663): undefined reference to `SDL_CreateWindowAndRenderer'
C:\Users\[...]\ccSkHjgE.o:Game.cpp:(.text+0x678): undefined reference to `SDL_SetWindowTitle'
C:\Users\[...]\ccSkHjgE.o:Game.cpp:(.text+0x836): undefined reference to `SDL_SetRenderDrawColor'
C:\Users\[...]\ccSkHjgE.o:Game.cpp:(.text+0x844): undefined reference to `SDL_RenderClear'
C:\Users\[...]\ccSkHjgE.o:Game.cpp:(.text+0x852): undefined reference to `SDL_RenderPresent'
C:\Users\[...]\ccSkHjgE.o:Game.cpp:(.text+0x865): undefined reference to `SDL_SetHint'
C:\Users\[...]\ccSkHjgE.o:Game.cpp:(.text+0x881): undefined reference to `SDL_RenderSetLogicalSize'
C:\Users\[...]\ccSkHjgE.o:Game.cpp:(.text+0x895): undefined reference to `SDL_GL_SetAttribute'
C:\Users\[...]\ccSkHjgE.o:Game.cpp:(.text+0x8a3): undefined reference to `SDL_GetError'
C:\Users\[...]\ccSkHjgE.o:Game.cpp:(.text+0x8d8): undefined reference to `SDL_GL_SetAttribute'
C:\Users\[...]\ccSkHjgE.o:Game.cpp:(.text+0x8e6): undefined reference to `SDL_GetError'
C:\Users\[...]\ccSkHjgE.o:Game.cpp:(.text+0xa3d): undefined reference to `SDL_Quit'
C:\Users\[...]\ccSkHjgE.o:Game.cpp:(.text+0xaba): undefined reference to `SDL_DestroyWindow'
C:\Users\[...]\ccSkHjgE.o:Game.cpp:(.text+0xad1): undefined reference to `SDL_DestroyRenderer'
f:/mingw/mingw-4.8.1/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: C:\Users\[...]\ccSkHjgE.o: bad reloc address 0x1b in section `.text$printf[_printf]'
collect2.exe: error: ld returned 1 exit status
make: *** [compile] Error 1
Troubleshooting
I have tried a number of things from supplying exact paths to libraries to updating SDL from 2.0.3 to 2.0.4. The behavior is the same. There are two include/lib folders in the MinGW devel folder for each architecture, and changing which one I include does not make a difference.
There seems to be a lot of commotion about the order of which arguments are supplied to g++, given the three posts below:
SDL2 Undefined references to functions
Try to change the sequence of the input params:
I've stumbled over this before (on Linux)
https://askubuntu.com/questions/68922/cant-compile-program-that-uses-sdl-after-upgrade-to-11-10-undefined-reference
Ok, solved. Apparently, for some mysterious reason, the order of the gcc options now matters.
http://smf.cataclysmdda.com/index.php?topic=11028.0
It looks like the SDL2_image library is included, but the main SDL2 library is not (the references could be out of order).
Unfortunately, regardless of how I have reordered the arguments, I can't seem to change this result. Unlike with most issues, I haven't even been able to make it any worse! Any and all help is greatly appreciated.
I don't believe this has anything to do with my code, considering a compile without linking -c completes fine, but if it assists with the solution I would be more than happy to post some of it (it is a LOT of code).
Edits
Per request, here is a dump of the full compile with the -v and -Wall options. It is too large for this question so I threw it in a pastebin.
http://pastebin.com/ydET621i
When using the -DDECLSPEC=__declspec(dllimport) option, the output becomes:
C:\Users\[...]\ccZ61vi9.o:Game.cpp:(.text+0x169): undefined reference to `_imp__SDL_GetTicks'
C:\Users\[...]\ccZ61vi9.o:Game.cpp:(.text+0x2b6): undefined reference to `_imp__SDL_GetMouseState'
C:\Users\[...]\ccZ61vi9.o:Game.cpp:(.text+0x2c6): undefined reference to `_imp__SDL_PollEvent'
C:\Users\[...]\ccZ61vi9.o:Game.cpp:(.text+0x2d6): undefined reference to `_imp__SDL_GetTicks'
C:\Users\[...]\ccZ61vi9.o:Game.cpp:(.text+0x36b): undefined reference to `_imp__SDL_GetTicks'
C:\Users\[...]\ccZ61vi9.o:Game.cpp:(.text+0x3f9): undefined reference to `_imp__SDL_GetTicks'
C:\Users\[...]\ccZ61vi9.o:Game.cpp:(.text+0x478): undefined reference to `_imp__SDL_GetTicks'
C:\Users\[...]\ccZ61vi9.o:Game.cpp:(.text+0x4f1): undefined reference to `_imp__SDL_RenderClear'
C:\Users\[...]\ccZ61vi9.o:Game.cpp:(.text+0x50d): undefined reference to `_imp__SDL_RenderPresent'
C:\Users\[...]\ccZ61vi9.o:Game.cpp:(.text+0x5a9): undefined reference to `_imp__SDL_ShowCursor'
C:\Users\[...]\ccZ61vi9.o:Game.cpp:(.text+0x5c5): undefined reference to `_imp__SDL_Init'
C:\Users\[...]\ccZ61vi9.o:Game.cpp:(.text+0x649): undefined reference to `_imp__SDL_CreateRenderer'
C:\Users\[...]\ccZ61vi9.o:Game.cpp:(.text+0x67b): undefined reference to `_imp__SDL_CreateWindowAndRenderer'
C:\Users\[...]\ccZ61vi9.o:Game.cpp:(.text+0x692): undefined reference to `_imp__SDL_SetWindowTitle'
C:\Users\[...]\ccZ61vi9.o:Game.cpp:(.text+0x852): undefined reference to `_imp__SDL_SetRenderDrawColor'
C:\Users\[...]\ccZ61vi9.o:Game.cpp:(.text+0x862): undefined reference to `_imp__SDL_RenderClear'
C:\Users\[...]\ccZ61vi9.o:Game.cpp:(.text+0x872): undefined reference to `_imp__SDL_RenderPresent'
C:\Users\[...]\ccZ61vi9.o:Game.cpp:(.text+0x887): undefined reference to `_imp__SDL_SetHint'
C:\Users\[...]\ccZ61vi9.o:Game.cpp:(.text+0x8a5): undefined reference to `_imp__SDL_RenderSetLogicalSize'
C:\Users\[...]\ccZ61vi9.o:Game.cpp:(.text+0x8bb): undefined reference to `_imp__SDL_GL_SetAttribute'
C:\Users\[...]\ccZ61vi9.o:Game.cpp:(.text+0x8cb): undefined reference to `_imp__SDL_GetError'
C:\Users\[...]\ccZ61vi9.o:Game.cpp:(.text+0x902): undefined reference to `_imp__SDL_GL_SetAttribute'
C:\Users\[...]\ccZ61vi9.o:Game.cpp:(.text+0x912): undefined reference to `_imp__SDL_GetError'
C:\Users\[...]\ccZ61vi9.o:Game.cpp:(.text+0xa6b): undefined reference to `_imp__SDL_Quit'
C:\Users\[...]\ccZ61vi9.o:Game.cpp:(.text+0xaea): undefined reference to `_imp__SDL_DestroyWindow'
C:\Users\[...]\ccZ61vi9.o:Game.cpp:(.text+0xb03): undefined reference to `_imp__SDL_DestroyRenderer'
f:/mingw/mingw-4.8.1/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: C:\Users\[...]\ccZ61vi9.o: bad reloc address 0x1b in section `.text$printf[_printf]'
collect2.exe: error: ld returned 1 exit status
make: *** [compile] Error 1
Running ar -t libSDL2.a produces the following:
SDL.o
SDL_assert.o
SDL_error.o
SDL_hints.o
SDL_log.o
SDL_atomic.o
SDL_spinlock.o
SDL_audio.o
SDL_audiocvt.o
SDL_audiodev.o
SDL_audiotypecvt.o
SDL_mixer.o
SDL_wave.o
SDL_cpuinfo.o
SDL_dynapi.o
SDL_clipboardevents.o
SDL_dropevents.o
SDL_events.o
SDL_gesture.o
SDL_keyboard.o
SDL_mouse.o
SDL_quit.o
SDL_touch.o
SDL_windowevents.o
SDL_rwops.o
SDL_haptic.o
SDL_gamecontroller.o
SDL_joystick.o
e_atan2.o
e_log.o
e_pow.o
e_rem_pio2.o
e_sqrt.o
k_cos.o
k_rem_pio2.o
k_sin.o
k_tan.o
s_atan.o
s_copysign.o
s_cos.o
s_fabs.o
s_floor.o
s_scalbn.o
s_sin.o
s_tan.o
SDL_power.o
SDL_d3dmath.o
SDL_render.o
SDL_yuv_mmx.o
SDL_yuv_sw.o
SDL_render_d3d.o
SDL_render_d3d11.o
SDL_render_gl.o
SDL_shaders_gl.o
SDL_render_gles.o
SDL_render_gles2.o
SDL_shaders_gles2.o
SDL_render_psp.o
SDL_blendfillrect.o
SDL_blendline.o
SDL_blendpoint.o
SDL_drawline.o
SDL_drawpoint.o
SDL_render_sw.o
SDL_rotate.o
SDL_getenv.o
SDL_iconv.o
SDL_malloc.o
SDL_qsort.o
SDL_stdlib.o
SDL_string.o
SDL_thread.o
SDL_timer.o
SDL_RLEaccel.o
SDL_blit.o
SDL_blit_0.o
SDL_blit_1.o
SDL_blit_A.o
SDL_blit_N.o
SDL_blit_auto.o
SDL_blit_copy.o
SDL_blit_slow.o
SDL_bmp.o
SDL_clipboard.o
SDL_egl.o
SDL_fillrect.o
SDL_pixels.o
SDL_rect.o
SDL_shape.o
SDL_stretch.o
SDL_surface.o
SDL_video.o
SDL_nullevents.o
SDL_nullframebuffer.o
SDL_nullvideo.o
SDL_diskaudio.o
SDL_dummyaudio.o
SDL_windows.o
SDL_xinput.o
SDL_windowsclipboard.o
SDL_windowsevents.o
SDL_windowsframebuffer.o
SDL_windowskeyboard.o
SDL_windowsmessagebox.o
SDL_windowsmodes.o
SDL_windowsmouse.o
SDL_windowsopengl.o
SDL_windowsopengles.o
SDL_windowsshape.o
SDL_windowsvideo.o
SDL_windowswindow.o
SDL_winmm.o
SDL_directsound.o
SDL_xaudio2.o
SDL_dinputjoystick.o
SDL_mmjoystick.o
SDL_windowsjoystick.o
SDL_xinputjoystick.o
SDL_dinputhaptic.o
SDL_windowshaptic.o
SDL_xinputhaptic.o
SDL_syspower.o
SDL_sysfilesystem.o
SDL_sysmutex.o
SDL_syssem.o
SDL_systhread.o
SDL_systls.o
SDL_syscond.o
SDL_systimer.o
SDL_sysloadso.o
Thanks to suggestions from #J.JHakala and #user657267 I have reached the conclusion that my installation of MinGW is actually 32 bit! Given that I was using the 64 bit libraries, they would read in like any other library, but the functions within them were not recognized.
For anyone else having this problem, you can download the 64 bit version of MinGW or alternatively just switch which libraries you are importing.
x86: i686-w64-mingw32
x64: x86_64-w64-mingw32
Related
(FYI Yes I do know that a similar question exists, But I have already tried all the answers.)
I'm trying to setup SDL2 with MinGW and I have everything set up beside one thing. Whenever I try to compile G++ gives no errors but then LD gives me a: undefined reference to SDL_Init Error.
c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\user\AppData\Local\Temp\cc28dE2R.o: in function `SDL_main':
C:\Users\user\Documents\SDL2/src/main.cpp:11: undefined reference to `SDL_Init'
c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\user\Documents\SDL2/src/main.cpp:14: undefined reference to `SDL_GetError'
c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\user\Documents\SDL2/src/main.cpp:18: undefined reference to `IMG_Init'
c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\user\Documents\SDL2/src/main.cpp:20: undefined reference to `SDL_GetError'
c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../libmingw32.a(main.o):(.text.startup+0xc0): undefined reference to `WinMain#16'
collect2.exe: error: ld returned 1 exit status
The terminal process "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Command C:\MinGW\bin\g++.exe -g src\*.cpp -o build\game.exe -ID:C:\MinGW\include -LD:C:\MinGW\lib -mwindows -lmingw32 -lSDL2main -lSDL2_image -lSDL2" terminated with exit code: 1.
I have tried to move the args around. doing -mwindows, adding -lmingw32. I still keep getting the same errors.. I was able to fix the WinMain Error.. But everything else I couldn't fix.
The command I'm Running to compile:
C:\MinGW\bin\g++.exe -g src\*.cpp -o build\game.exe -ID:C:\MinGW\include -LD:C:\MinGW\lib -mwindows -lSDL2main -lSDL2_image -lSDL2
If i could get any help that would be amazing
The common cause of mysterious undefined reference errors on MinGW is using libraries compiled for x64 with an x32 compiler, or vice versa. SDL ships both x32 and x64 ones, try the other ones.
I was able to fix the WinMain Error
Be aware that the intended way of fixing undefined reference to WinMain#16 is not adding #define SDL_MAIN_HANDLED and not doing #undef main. Once you get the right libraries (see the first paragraph), the error should disappear by itself.
Make sure you use int main(int, char**) (and not int main() nor void main()), otherwise it won't work.
-ID:C:\MinGW\include -LD:C:\MinGW\lib
You shouldn't need those flags. Those directories will be searched automatically.
Since you didn't specify any other directories, I assume you placed the SDL files directly into the compiler directories, which isn't a good practice, IMO.
I assume D:C: a typo?
-mwindows
The only purpose of this flag (that I know of) is to prevent your app from automatically opening a terminal window for itself, for release builds.
I am developing c++ application in Win7 OS using GCC compiler and Code::Blocks as IDE. I have everything set up and everything works. Now i need to move whole development environment to virtual machine so i have installed system, IDE compiler, copied whole project. I double checked all libraries and options and they are same. When i try to build application i get this errors (50) from build log(relevant parts):
-------------- Build: Debug in MagicReportsFull (compiler: GNU GCC Compiler)---------------
mingw32-g++.exe -Wall -std=c++11 -fexceptions -std=c++11 -g -IC:\Projects\MagicReportsFull\include -IC:\Projects\MagicReportsFull\ -I"C:\Program Files (x86)\CodeBlocks\MinGW" -IC:\Projects\MagicReportsFull -I"C:\Program Files (x86)\CodeBlocks\MinGW" -IC:\Projects\MagicReportsFull\include -c C:\Projects\MagicReportsFull\main.cpp -o obj\Debug\main.o
windres.exe -J rc -O coff -i C:\Projects\MAGICR~1\resource.rc -o obj\Debug\resource.res
windres.exe -J rc -O coff -i C:\Projects\MAGICR~1\version.rc -o obj\Debug\version.res
mingw32-g++.exe -LC:\Projects\MagicReportsFull\ -o bin\Debug\MagicReportsFull.exe obj\Debug\main.o obj\Debug\resource.res obj\Debug\version.res -lcomdlg32 -lgdi32 -luser32 -lshlwapi ..\..\CustomLibraries\lpng1636-build\libpng16.a ..\..\CustomLibraries\zlib-1.2.11-build\libzlibstatic.a ..\..\CustomLibraries\libharu-RELEASE_2_3_0-build\src\libhpdfs.a -lcomctl32 -mwindows
.
.
.
obj\Debug\main.o: In function `Z19CUSTOM_RegularTableP13_HPDF_Doc_RecP14_HPDF_Dict_RecffPfiS3_ic':
C:/Projects/MagicReportsFull/pdf.h:99: undefined reference to `HPDF_Page_Rectangle'
C:/Projects/MagicReportsFull/pdf.h:100: undefined reference to `HPDF_Page_Stroke'
C:/Projects/MagicReportsFull/pdf.h:102: undefined reference to `HPDF_Page_Rectangle'
C:/Projects/MagicReportsFull/pdf.h:103: undefined reference to `HPDF_Page_Stroke'
C:/Projects/MagicReportsFull/pdf.h:114: undefined reference to `HPDF_Page_MoveTo'
C:/Projects/MagicReportsFull/pdf.h:115: undefined reference to `HPDF_Page_LineTo'
C:/Projects/MagicReportsFull/pdf.h:116: undefined reference to `HPDF_Page_Stroke'
C:/Projects/MagicReportsFull/pdf.h:125: undefined reference to `HPDF_Page_MoveTo'
C:/Projects/MagicReportsFull/pdf.h:126: undefined reference to `HPDF_Page_LineTo'
C:/Projects/MagicReportsFull/pdf.h:127: undefined reference to `HPDF_Page_Stroke'
obj\Debug\main.o: In function `Z27CUSTOM_RegularTable_AddText20_CUSTOM_TableHandleriiPKhjccP14_HPDF_Dict_Recj':
C:/Projects/MagicReportsFull/pdf.h:198: undefined reference to `HPDF_Font_GetCapHeight'
C:/Projects/MagicReportsFull/pdf.h:232: undefined reference to `HPDF_Font_MeasureText'
C:/Projects/MagicReportsFull/pdf.h:294: undefined reference to `HPDF_Page_SetFontAndSize'
C:/Projects/MagicReportsFull/pdf.h:300: undefined reference to `HPDF_Font_MeasureText'
C:/Projects/MagicReportsFull/pdf.h:315: undefined reference to `HPDF_Page_BeginText'
C:/Projects/MagicReportsFull/pdf.h:316: undefined reference to `HPDF_Page_TextRect'
C:/Projects/MagicReportsFull/pdf.h:317: undefined reference to `HPDF_Page_EndText'
obj\Debug\main.o: In function `Z13pdf_generatorcPci':
C:/Projects/MagicReportsFull/pdf.h:347: undefined reference to `HPDF_New'
C:/Projects/MagicReportsFull/pdf.h:353: undefined reference to `HPDF_SetCompressionMode'
C:/Projects/MagicReportsFull/pdf.h:355: undefined reference to `HPDF_GetFont'
C:/Projects/MagicReportsFull/pdf.h:356: undefined reference to `HPDF_GetFont'
C:/Projects/MagicReportsFull/pdf.h:357: undefined reference to `HPDF_GetFont'
C:/Projects/MagicReportsFull/pdf.h:358: undefined reference to `HPDF_GetFont'
C:/Projects/MagicReportsFull/pdf.h:362: undefined reference to `HPDF_LoadPngImageFromFile'
C:/Projects/MagicReportsFull/pdf.h:442: undefined reference to `HPDF_AddPage'
C:/Projects/MagicReportsFull/pdf.h:444: undefined reference to `HPDF_Page_SetSize'
C:/Projects/MagicReportsFull/pdf.h:446: undefined reference to `HPDF_Page_SetLineWidth'
C:/Projects/MagicReportsFull/pdf.h:447: undefined reference to `HPDF_Page_SetLineWidth'
C:/Projects/MagicReportsFull/pdf.h:460: undefined reference to `HPDF_Page_DrawImage'
C:/Projects/MagicReportsFull/pdf.h:463: undefined reference to `HPDF_Page_BeginText'
C:/Projects/MagicReportsFull/pdf.h:464: undefined reference to `HPDF_Page_SetRGBFill'
C:/Projects/MagicReportsFull/pdf.h:465: undefined reference to `HPDF_Page_SetFontAndSize'
C:/Projects/MagicReportsFull/pdf.h:466: undefined reference to `HPDF_Page_TextRect'
C:/Projects/MagicReportsFull/pdf.h:467: undefined reference to `HPDF_Page_EndText'
C:/Projects/MagicReportsFull/pdf.h:685: undefined reference to `HPDF_AddPage'
C:/Projects/MagicReportsFull/pdf.h:687: undefined reference to `HPDF_Page_SetSize'
C:/Projects/MagicReportsFull/pdf.h:689: undefined reference to `HPDF_Page_SetLineWidth'
C:/Projects/MagicReportsFull/pdf.h:690: undefined reference to `HPDF_Page_SetLineWidth'
C:/Projects/MagicReportsFull/pdf.h:699: undefined reference to `HPDF_Page_DrawImage'
C:/Projects/MagicReportsFull/pdf.h:702: undefined reference to `HPDF_Page_BeginText'
C:/Projects/MagicReportsFull/pdf.h:703: undefined reference to `HPDF_Page_SetRGBFill'
C:/Projects/MagicReportsFull/pdf.h:704: undefined reference to `HPDF_Page_SetFontAndSize'
C:/Projects/MagicReportsFull/pdf.h:705: undefined reference to `HPDF_Page_TextRect'
C:/Projects/MagicReportsFull/pdf.h:706: undefined reference to `HPDF_Page_EndText'
C:/Projects/MagicReportsFull/pdf.h:829: undefined reference to `HPDF_AddPage'
C:/Projects/MagicReportsFull/pdf.h:831: undefined reference to `HPDF_Page_SetSize'
C:/Projects/MagicReportsFull/pdf.h:833: undefined reference to `HPDF_Page_SetLineWidth'
C:/Projects/MagicReportsFull/pdf.h:834: undefined reference to `HPDF_Page_SetLineWidth'
C:/Projects/MagicReportsFull/pdf.h:843: undefined reference to `HPDF_Page_DrawImage'
C:/Projects/MagicReportsFull/pdf.h:846: undefined reference to `HPDF_Page_BeginText'
Process terminated with status 1 (0 minute(s), 5 second(s))
50 error(s), 37 warning(s) (0 minute(s), 5 second(s))
As you can see, I am using LibHaru library which works flawlesly in guest system. Also i believe problem is not in library itself but in linker.
Project build options -> Linker settings -> Link libraries:
libcomdlg32.a
libgdi32.a
libuser32.a
libshlwapi.a
..\..\CustomLibraries\lpng1636-build\libpng16.a
..\..\CustomLibraries\zlib-1.2.11-build\libzlibstatic.a
..\..\CustomLibraries\libharu-RELEASE_2_3_0-build\src\libhpdfs.a
libcomctl32.a
I tried to do the same thing in Win7 virtual machine with same results. I am using same files as in guest system. Any ideas what went wrong?
I posted this question because i was not sure about linker settings being ok but since nobody said that its wrong i searched for other problems. So it turns out that i have been using wrong Program Files in Global compiler settings -> Toolchain executables. Also library order was wrong, LibHaru needed to be first and then other dependent libraries. Uninstalled GCC and IDE then installed correct version of GCC + IDE. Now it compiles without problem.
I suspect that reinstalling the compiler might have changed the version of MinGW, and maybe the library isn't compatible between these 2 versions.
I've had similar weird behaviour with MinGW before, and recompiling the dependencies myself with the same compiler fixed the issue (it's a tedious solution though).
Are the compiler and system exactly the same ? (same architecture, version, etc)
Check if you havent copied some codeblocks environment specific files from the previous system, maybe codeblocks is trying to compile with options that doesn't apply to your new environment.
Does the libhpdfs headers have system dependent defines ?
Did you compile libhpdfs.a yourself ?
Did you try recompiling it yourself on the virtual machine ?
I am fairly new to Fortran and this may sound like a silly question. I encounter an error when compiling the Fortran code that is posted as an example in the NLOPT Wiki.
I compile in Ubuntu 18.04 LTS using the following command:
gfortran example-nlopt.f90 -o example-nlopt -I/usr/local/include/
The following error is produced in the terminal:
/tmp/ccbAim6b.o: In function `MAIN__':
example-nlopt.f90:(.text+0x26): undefined reference to `nlo_create_'
example-nlopt.f90:(.text+0x42): undefined reference to `nlo_get_lower_bounds_'
example-nlopt.f90:(.text+0x67): undefined reference to `nlo_set_lower_bounds_'
example-nlopt.f90:(.text+0x8a): undefined reference to `nlo_set_min_objective_'
example-nlopt.f90:(.text+0xca): undefined reference to `nlo_add_inequality_constraint_'
example-nlopt.f90:(.text+0x10e): undefined reference to `nlo_add_inequality_constraint_'
example-nlopt.f90:(.text+0x12d): undefined reference to `nlo_set_xtol_rel_'
example-nlopt.f90:(.text+0x164): undefined reference to `nlo_optimize_'
example-nlopt.f90:(.text+0x305): undefined reference to `nlo_destroy_'
collect2: error: ld returned 1 exit status
Based on what I saw in nlopt's documentation (https://nlopt.readthedocs.io/en/latest/NLopt_Installation/#changing-the-installation-directory) it looks like you just need to specify the library to link against. Maybe try this:
gfortran -I/usr/local/include/ -L/usr/local/lib example-nlopt.f90 -o example-nlopt -lnlopt -lm
This assumes you have the libnlopt.so in /usr/local/lib, if not then point to its location with the -L option.
I've build libvpx.a and headers with MSYS (for MinGW). When I'm trying to compile an example a lot of undefined references to vpx members occurs:
g++ -m32 -static -o dist/Debug/MinGW-Windows/test1 build/Debug/MinGW-Windows/main.o -L/D/Libraries/libvpx/ -lvpx
build/Debug/MinGW-Windows/main.o: In function `main':
D:\Projects\CPP_test\Test1/main.cpp:107: undefined reference to `die'
D:\Projects\CPP_test\Test1/main.cpp:109: undefined reference to `vpx_video_reader_open'
D:\Projects\CPP_test\Test1/main.cpp:111: undefined reference to `die'
D:\Projects\CPP_test\Test1/main.cpp:114: undefined reference to `die'
D:\Projects\CPP_test\Test1/main.cpp:116: undefined reference to `vpx_video_reader_get_info'
D:\Projects\CPP_test\Test1/main.cpp:118: undefined reference to `get_vpx_decoder_by_fourcc'
D:\Projects\CPP_test\Test1/main.cpp:120: undefined reference to `die'
D:\Projects\CPP_test\Test1/main.cpp:125: undefined reference to `die_codec'
D:\Projects\CPP_test\Test1/main.cpp:127: undefined reference to `vpx_video_reader_read_frame'
D:\Projects\CPP_test\Test1/main.cpp:132: undefined reference to `vpx_video_reader_get_frame'
D:\Projects\CPP_test\Test1/main.cpp:134: undefined reference to `die_codec'
D:\Projects\CPP_test\Test1/main.cpp:137: undefined reference to `vpx_img_write'
D:\Projects\CPP_test\Test1/main.cpp:144: undefined reference to `die_codec'
D:\Projects\CPP_test\Test1/main.cpp:149: undefined reference to `vpx_video_reader_close'
All includes made, lib is linked...
So what am I doing wrong?
PS: Maybe it's not enough to link the libvpx.a file, and I also need the .c files that come with the sources (if so, I do not understand what for the .a lib file is needed)?
It looks like you just copied and pasted blindly from the example.
The functions die_codec and vpx_video_* all come from tools_common.c (https://github.com/webmproject/libvpx/blob/master/tools_common.c) and video_reader.h (https://github.com/webmproject/libvpx/blob/master/video_reader.c), which I believe is not a core part of the libvpx sdk (see here: http://www.webmproject.org/docs/webm-sdk/files.html).
In order for your example to work, you will need to copy-paste those files (both the .c and .h files) as well and include them in your main.cc file.
I've successfully installed and run the OpenGTS server application using the HTTP based GPRMC servlet.
Now I'm attempting to run the OpenDMTP C Client on linux. I get stuck at the very first step.
When I try to use the make command in the terminal:
make dest=linux dmtp
I get the following errors:
Linking 'dmtpd' ...
cc -o ./build_lin/obj/dmtp/dmtpd -Wall -DTARGET_LINUX -DTRANSPORT_MEDIA_SOCKET -
DPROTOCOL_THREAD -DGPS_THREAD -Isrc /usr/lib/i386-linux-gnu/libpthread.so /usr/lib/i386-linux-gnu/libm.so ./build_lin/obj/custom/startup.o /build_lin/obj/custom/transport.o ./build_lin/obj/custom/log.o ./build_lin/obj/custom/gps.o ./build_lin/obj/custom/gpsmods.o ./build_lin/obj/custom/linux/os.o -L./build_lin/obj/lib -lmodule -lbase -ltools
./build_lin/obj/lib/libbase.a(propman.o): In function _propGetDoubleValue': propman.c: (.text+0xec8): undefined reference topow'
propman.c:(.text+0xf0b): undefined reference to pow'
./build_lin/obj/lib/libbase.a(propman.o): In function_propSetDoubleValue':
propman.c:(.text+0xf5b): undefined reference to pow' propman.c:(.text+0xf66): undefined reference torint'
./build_lin/obj/lib/libbase.a(propman.o): In function _propInitKeyValueFromString':
propman.c:(.text+0x26e4): undefined reference topow'
propman.c:(.text+0x26ef): undefined reference to rint'
./build_lin/obj/lib/libtools.a(gpstools.o): In functiongpsRadiansToPoint':
gpstools.c:(.text+0x253): undefined reference to sin' gpstools.c:(.text+0x269): undefined reference to cos'
gpstools.c:(.text+0x277): undefined reference to cos' gpstools.c:(.text+0x292): undefined reference to sin'
gpstools.c:(.text+0x2b0): undefined reference to sqrt' gpstools.c:(.text+0x2be): undefined reference to sqrt'
gpstools.c:(.text+0x2cd): undefined reference to atan2'
./build_lin/obj/lib/libtools.a(threads.o): In functionthreadCreate':
threads.c:(.text+0x191): undefined reference to `pthread_create'
It appears math.h isn't being accessed by the file. I think the program doesn't include the headers from the \usr\include directory but don't know how to add this path to the makefile. Please help!
Please help!