| From 88c0af910edd156075acf04d8497f541ed377d4b Mon Sep 17 00:00:00 2001 |
| From: Romain Naour <romain.naour@gmail.com> |
| 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 <romain.naour@gmail.com> |
| --- |
| 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 |
| |