From 88c0af910edd156075acf04d8497f541ed377d4b Mon Sep 17 00:00:00 2001 From: Romain Naour Date: Sun, 28 May 2017 00:25:11 +0200 Subject: [PATCH] use pcap-config to fix static linking with libpcap When linking demo_mn_console statically with pcap, the CMake build system forget to link with other libraries linked with libpcap (-lnl-genl-3 -lnl-3 -ldbus-1 -pthread). [100%] Linking C executable demo_mn_console lib64/libpcap.a(pcap-linux.o): In function nl80211_init': pcap-linux.c:(.text+0x41e): undefined reference tonl_socket_alloc' To fix this, the build system could use pcap-config: pcap-config --libs --static -L/path/to/sysroot/usr/lib -lpcap -L/path/to/sysroot/usr/lib/.libs -lnl-genl-3 -lnl-3 -L/path/to/sysroot/usr/lib -ldbus-1 -pthread Fixes: http://autobuild.buildroot.net/results/f43/f437d09ac6c689c911e1885b95da33b692f2cb3c http://autobuild.buildroot.net/results/385/3859dc0f4de7e3284a96d5841f040f69f71842df https://github.com/OpenAutomationTechnologies/openPOWERLINK_V2/issues/187 Signed-off-by: Romain Naour --- apps/demo_cn_console/linux.cmake | 20 ++++++++++++++++++++ apps/demo_mn_console/linux.cmake | 20 ++++++++++++++++++++ apps/demo_mn_qt/linux.cmake | 22 +++++++++++++++++++++- drivers/linux/drv_daemon_pcap/CMakeLists.txt | 22 +++++++++++++++++++++- 4 files changed, 82 insertions(+), 2 deletions(-) diff --git a/apps/demo_cn_console/linux.cmake b/apps/demo_cn_console/linux.cmake index 1c6f51c..7752917 100644 --- a/apps/demo_cn_console/linux.cmake +++ b/apps/demo_cn_console/linux.cmake @@ -46,8 +46,28 @@ SET (DEMO_ARCH_SOURCES ################################################################################ # Set architecture specific libraries +IF (NOT CFG_COMPILE_SHARED_LIBRARY) + SET(PCAP_CONFIG_OPTS --static) +ENDIF() + IF (CFG_KERNEL_STACK_DIRECTLINK OR CFG_KERNEL_STACK_USERSPACE_DAEMON) + +find_program(PCAP_CONFIG NAMES pcap-config PATHS) + +if (PCAP_CONFIG) + message (STATUS "Looking for pcap-config... ${PCAP_CONFIG}") + + execute_process (COMMAND ${PCAP_CONFIG} --libs ${PCAP_CONFIG_OPTS} + OUTPUT_VARIABLE PCAP_LDFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process (COMMAND ${PCAP_CONFIG} --cflags ${PCAP_CONFIG_OPTS} + OUTPUT_VARIABLE PCAP_CFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE) + + SET (ARCH_LIBRARIES ${ARCH_LIBRARIES} ${PCAP_LDFLAGS}) +else (PCAP_CONFIG) + message (STATUS "pcap-config not found, using defaults...") SET (ARCH_LIBRARIES ${ARCH_LIBRARIES} pcap) +endif (PCAP_CONFIG) + ENDIF (CFG_KERNEL_STACK_DIRECTLINK OR CFG_KERNEL_STACK_USERSPACE_DAEMON) SET (ARCH_LIBRARIES ${ARCH_LIBRARIES} pthread rt) diff --git a/apps/demo_mn_console/linux.cmake b/apps/demo_mn_console/linux.cmake index d24e4fc..5951dbf 100644 --- a/apps/demo_mn_console/linux.cmake +++ b/apps/demo_mn_console/linux.cmake @@ -46,8 +46,28 @@ SET (DEMO_ARCH_SOURCES ################################################################################ # Set architecture specific libraries +IF (NOT CFG_COMPILE_SHARED_LIBRARY) + SET(PCAP_CONFIG_OPTS --static) +ENDIF() + IF (CFG_KERNEL_STACK_DIRECTLINK OR CFG_KERNEL_STACK_USERSPACE_DAEMON) + +find_program(PCAP_CONFIG NAMES pcap-config PATHS) + +if (PCAP_CONFIG) + message (STATUS "Looking for pcap-config... ${PCAP_CONFIG}") + + execute_process (COMMAND ${PCAP_CONFIG} --libs ${PCAP_CONFIG_OPTS} + OUTPUT_VARIABLE PCAP_LDFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process (COMMAND ${PCAP_CONFIG} --cflags ${PCAP_CONFIG_OPTS} + OUTPUT_VARIABLE PCAP_CFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE) + + SET (ARCH_LIBRARIES ${ARCH_LIBRARIES} ${PCAP_LDFLAGS}) +else (PCAP_CONFIG) + message (STATUS "pcap-config not found, using defaults...") SET (ARCH_LIBRARIES ${ARCH_LIBRARIES} pcap) +endif (PCAP_CONFIG) + ENDIF (CFG_KERNEL_STACK_DIRECTLINK OR CFG_KERNEL_STACK_USERSPACE_DAEMON) SET (ARCH_LIBRARIES ${ARCH_LIBRARIES} pthread rt) diff --git a/apps/demo_mn_qt/linux.cmake b/apps/demo_mn_qt/linux.cmake index 6ed75ee..c69dbd9 100644 --- a/apps/demo_mn_qt/linux.cmake +++ b/apps/demo_mn_qt/linux.cmake @@ -37,8 +37,28 @@ ################################################################################ # Set architecture specific libraries +IF (NOT CFG_COMPILE_SHARED_LIBRARY) + SET(PCAP_CONFIG_OPTS --static) +ENDIF() + IF(CFG_KERNEL_STACK_DIRECTLINK OR CFG_KERNEL_STACK_USERSPACE_DAEMON) - SET(ARCH_LIBRARIES ${ARCH_LIBRARIES} pcap) + +find_program(PCAP_CONFIG NAMES pcap-config PATHS) + +if (PCAP_CONFIG) + message (STATUS "Looking for pcap-config... ${PCAP_CONFIG}") + + execute_process (COMMAND ${PCAP_CONFIG} --libs ${PCAP_CONFIG_OPTS} + OUTPUT_VARIABLE PCAP_LDFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process (COMMAND ${PCAP_CONFIG} --cflags ${PCAP_CONFIG_OPTS} + OUTPUT_VARIABLE PCAP_CFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE) + + SET (ARCH_LIBRARIES ${ARCH_LIBRARIES} ${PCAP_LDFLAGS}) +else (PCAP_CONFIG) + message (STATUS "pcap-config not found, using defaults...") + SET (ARCH_LIBRARIES ${ARCH_LIBRARIES} pcap) +endif (PCAP_CONFIG) + ENDIF() SET(ARCH_LIBRARIES ${ARCH_LIBRARIES} pthread rt) diff --git a/drivers/linux/drv_daemon_pcap/CMakeLists.txt b/drivers/linux/drv_daemon_pcap/CMakeLists.txt index ecceb4c..b362a34 100644 --- a/drivers/linux/drv_daemon_pcap/CMakeLists.txt +++ b/drivers/linux/drv_daemon_pcap/CMakeLists.txt @@ -140,7 +140,27 @@ INCLUDE_DIRECTORIES( ${CONTRIB_SOURCE_DIR} ) -SET (ARCH_LIBRARIES pcap pthread rt) +IF (NOT CFG_COMPILE_SHARED_LIBRARY) + SET(PCAP_CONFIG_OPTS --static) +ENDIF() + +find_program(PCAP_CONFIG NAMES pcap-config PATHS) + +if (PCAP_CONFIG) + message (STATUS "Looking for pcap-config... ${PCAP_CONFIG}") + + execute_process (COMMAND ${PCAP_CONFIG} --libs ${PCAP_CONFIG_OPTS} + OUTPUT_VARIABLE PCAP_LDFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process (COMMAND ${PCAP_CONFIG} --cflags ${PCAP_CONFIG_OPTS} + OUTPUT_VARIABLE PCAP_CFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE) + + SET (ARCH_LIBRARIES ${ARCH_LIBRARIES} ${PCAP_LDFLAGS}) +else (PCAP_CONFIG) + message (STATUS "pcap-config not found, using defaults...") + SET (ARCH_LIBRARIES ${ARCH_LIBRARIES} pcap) +endif (PCAP_CONFIG) + +SET (ARCH_LIBRARIES ${ARCH_LIBRARIES} pthread rt) ADD_EXECUTABLE(${EXE_NAME} ${DRV_SOURCES}) SET_PROPERTY(TARGET ${EXE_NAME} PROPERTY COMPILE_DEFINITIONS_DEBUG DEBUG;DEF_DEBUG_LVL=${CFG_DEBUG_LVL}) -- 2.9.4