Hola wenas, estoy intentando compilar un código linkando estáticamente las librerías de las que hace uso.
Concretamente mi código hace uso de pcap, iw, trace i pthread. Todas ellas tienen los archivos .so y un .a, de la trace además hay un .la
Al compilar de forma normal (haciendo uso de las librerías dinámicas) el ejecutable se linka correctamente, pero al añadir el parámetro -static el linkado falla diciendo "Undefined reference to" y las difernetes llamadas que hago a los códigos de las librerías.
El makefile tiene estas líneas:
CC=g++
CXXFLAGS=-DDEBUG -Iinclude -ansi -O2 -DNDEBUG -Wall -Wextra -Werror -Wno-uninitialized -Wno-sign-compare -Wno-unused-parameter -Wno-unused-result
LDFLAGS=-lpcap -liw -lpthread -ltrace
Si en LDFLAGS añado "-static" es cuando no linka (también lo he añadido a CXXFLAGS sin éxito). Para probar también he intentado realizar una compilación "manual" con el comando:
g++ -o main -DDEBUG -Iinclude -static -pthread -ltrace -ltrace -lpcap *.cpp
Con los mismos
resultados/tmp/ccZUmwOu.o: In function `CaptureStorage::addCapture(unsigned char const*, long, long, unsigned short)':
CaptureStorage.cpp:(.text+0x13e): undefined reference to `trace_get_wireless_signal_strength_dbm'
/tmp/cc9tWzS3.o: In function `enum_devices_callback_get80211(int, char*, char**, int)':
NetManager.cpp:(.text+0x42): undefined reference to `iw_get_basic_config'
/tmp/cc9tWzS3.o: In function `NetManager::list80211Interfaces()':
NetManager.cpp:(.text+0x116): undefined reference to `iw_sockets_open'
NetManager.cpp:(.text+0x13a): undefined reference to `iw_enum_devices'
/tmp/cc9tWzS3.o: In function `NetManager::startMonitoring()':
NetManager.cpp:(.text+0x6d3): undefined reference to `pcap_open_live'
NetManager.cpp:(.text+0x728): undefined reference to `pcap_compile'
NetManager.cpp:(.text+0x754): undefined reference to `pcap_setfilter'
/tmp/cc9tWzS3.o: In function `NetManager::stopMonitoring()':
NetManager.cpp:(.text+0x80d): undefined reference to `pcap_breakloop'
NetManager.cpp:(.text+0x847): undefined reference to `pcap_close'
/tmp/cc9tWzS3.o: In function `NetManager::captureThread_func()':
NetManager.cpp:(.text+0xbd3): undefined reference to `pcap_loop'
¿Que hago mal? La pthread lo arreglo cambiando el -lpthread por un simple "-pthread", pero, obviamente, esto no arregla el resto de dependencias.
Saludos!