1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
|
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
|