Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Trying to build as a static binary #65

Open
ric96 opened this issue Nov 27, 2024 · 0 comments
Open

Trying to build as a static binary #65

ric96 opened this issue Nov 27, 2024 · 0 comments

Comments

@ric96
Copy link

ric96 commented Nov 27, 2024

Hi all,

Trying to build the demo as a static binary with the following cmake changes

diff --git a/CMakeLists.txt b/CMakeLists.txt
index e13cf29..9c0b44d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -8,13 +8,18 @@ endforeach()
 
 # Uncomment if the program needs debugging
 #set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -ggdb")
-
+set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
+set(BUILD_SHARED_LIBS OFF)
+SET(CMAKE_EXE_LINK_DYNAMIC_C_FLAGS "-Wl,-Bstatic")
+SET(CMAKE_EXE_LINK_DYNAMIC_CXX_FLAGS "-Wl,-Bstatic")
+set(CMAKE_EXE_LINKER_FLAGS "-static")
 set(CMAKE_C_STANDARD 99) # LVGL officially supports C99 and above
 set(CMAKE_CXX_STANDARD 17) #C17
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
 set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
 add_subdirectory(lvgl)
 target_include_directories(lvgl PUBLIC ${PROJECT_SOURCE_DIR})
+link_libraries("-static-libgcc -static-libstdc++")
 
 if (LV_USE_LINUX_DRM)
 
@@ -23,7 +28,7 @@ if (LV_USE_LINUX_DRM)
 
     target_include_directories(lvgl PUBLIC ${LIBDRM_INCLUDE_DIRS})
     add_executable(lvglsim main.c mouse_cursor_icon.c)
-    target_link_libraries(lvglsim lvgl lvgl::examples lvgl::demos lvgl::thorvg ${LIBDRM_LIBRARIES} m pthread)
+    target_link_libraries(lvglsim lvgl lvgl::examples lvgl::demos lvgl::thorvg ${LIBDRM_LIBRARIES} m pthread -static-libgcc -static-libstdc++)
 
 elseif (LV_USE_SDL)
 
@@ -34,7 +39,7 @@ elseif (LV_USE_SDL)
     target_include_directories(lvgl PRIVATE ${SDL2_INCLUDE_DIRS})
     target_include_directories(lvgl PRIVATE ${SDL2_IMAGE_INCLUDE_DIRS})
     add_executable(lvglsim main.c mouse_cursor_icon.c)
-    target_link_libraries(lvglsim lvgl lvgl::examples lvgl::demos lvgl::thorvg ${SDL2_LIBRARIES} ${SDL2_IMAGE_LIBRARIES} m pthread)
+    target_link_libraries(lvglsim lvgl lvgl::examples lvgl::demos lvgl::thorvg ${SDL2_LIBRARIES} ${SDL2_IMAGE_LIBRARIES} m pthread -static-libgcc -static-libstdc++)
 
 elseif (LV_USE_WAYLAND)
 
@@ -55,13 +60,17 @@ elseif (LV_USE_WAYLAND)
         mouse_cursor_icon.c backends/wayland.c)
     target_compile_definitions(lvglsim PRIVATE LV_CONF_INCLUDE_SIMPLE)
     target_link_libraries(lvglsim lvgl lvgl::examples lvgl::demos lvgl::thorvg m
-        wayland-client wayland-cursor xkbcommon)
+        wayland-client wayland-cursor xkbcommon -static-libgcc -static-libstdc++)
 
 else()
 
     # No specific build steps required for FBDEV
     add_executable(lvglsim main.c mouse_cursor_icon.c)
-    target_link_libraries(lvglsim lvgl lvgl::examples lvgl::demos lvgl::thorvg m pthread)
+    target_link_libraries(lvglsim lvgl lvgl::examples lvgl::demos lvgl::thorvg m pthread -static-libgcc -static-libstdc++)
+    set_target_properties(lvglsim PROPERTIES
+      LINK_SEARCH_START_STATIC ON
+      LINK_SEARCH_END_STATIC ON
+    )
 endif()
 
 add_custom_target (run COMMAND ${EXECUTABLE_OUTPUT_PATH}/lvglsim DEPENDS lvglsim)
diff --git a/Makefile b/Makefile
index e91e403..73e7b26 100644
--- a/Makefile
+++ b/Makefile
@@ -10,8 +10,8 @@ WARNINGS		:= -Wall -Wshadow -Wundef -Wmissing-prototypes -Wno-discarded-qualifie
 					-Wsizeof-pointer-memaccess -Wno-format-nonliteral -Wno-cast-qual -Wunreachable-code -Wno-switch-default -Wreturn-type -Wmultichar -Wformat-security \
 					-Wno-ignored-qualifiers -Wno-error=pedantic -Wno-sign-compare -Wno-error=missing-prototypes -Wdouble-promotion -Wclobbered -Wdeprecated -Wempty-body \
 					-Wshift-negative-value -Wstack-usage=2048 -Wno-unused-value -std=gnu99
-CFLAGS 			?= -O3 -g0 -I$(LVGL_DIR)/ $(WARNINGS)
-LDFLAGS 		?= -lm
+CFLAGS 			?= -O3 -g0 -static -I$(LVGL_DIR)/ $(WARNINGS)
+LDFLAGS 		?= -lm -static
 BIN 			= main
 BUILD_DIR 		= ./build
 BUILD_OBJ_DIR 	= $(BUILD_DIR)/obj
diff --git a/lvgl b/lvgl
--- a/lvgl
+++ b/lvgl
@@ -1 +1 @@
-Subproject commit 8d47460580c6e17ff800aaac2dbbb11c3520cc44
+Subproject commit 8d47460580c6e17ff800aaac2dbbb11c3520cc44-dirty

However at the final link stage I get this error:

[100%] Linking CXX executable /home/ric/lv_port_linux/bin/lvglsim
/usr/bin/cmake -E cmake_link_script CMakeFiles/lvglsim.dir/link.txt --verbose=1
/usr/lib64/ccache/c++ -static CMakeFiles/lvglsim.dir/main.c.o CMakeFiles/lvglsim.dir/mouse_cursor_icon.c.o -o /home/ric/lv_port_linux/bin/lvglsim  -static-libgcc -static-libstdc++ lib/liblvgl.a lib/liblvgl_examples.a lib/liblvgl_demos.a lib/liblvgl_thorvg.a -lm -lpthread -static-libgcc -static-libstdc++ lib/liblvgl.a -static 
/usr/bin/ld: cannot find -lstdc++: No such file or directory
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/lvglsim.dir/build.make:121: /home/ric/lv_port_linux/bin/lvglsim] Error 1
make[2]: Leaving directory '/home/ric/lv_port_linux/build'
make[1]: *** [CMakeFiles/Makefile2:113: CMakeFiles/lvglsim.dir/all] Error 2
make[1]: Leaving directory '/home/ric/lv_port_linux/build'
make: *** [Makefile:139: all] Error 2
make: Leaving directory '/home/ric/lv_port_linux/build'

I am confused what is triggering the -lstdc++ flag instead of its static alternative.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant