![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Compilar un binario enlazado estáticamente en SolarisCon el Sun CC Pro, la opción de enlazado estático es "-dn" (-dy es para dinámico).El problema viene de que el orden en que se ponene las librerías en la línea de enlazado sí importa, y hay que ponerlas desde la más específica a la más general. Ejemplo: cc -c dlstubs.c cc -c warp_and_send.c cc -dn -o warp_and_send warp_and_send.o -L/usr/X11R6/lib -lXtst -lXext -lX11 -lXpm -lsocket -lnsl dlstubs.o # NOTA: ver http://www.deer-run.com/~hal/sol-static.txt En http://www.deer-run.com/~hal/sol-static.txt explican que, por desgracia, en la libc estática no están las funciones de cargar librerías de forma dinámica (dl*), pero que libnsl las menciona (y libnsl se necesita parta poder meter libsocket, que a su vez es para poder usar sockets). La solución es hacer un pequeño ficherito llamado dlstubs.c que contenga lo siguiente:
#include <sys/types.h>
#include <dlfcn.h>
/* dl*() stub routines for static compilation. Prepared from
/usr/include/dlfcn.h by Hal Pomeranz <hal@deer-run.com> */
void *dlopen(const char *str, int x) {}
void *dlsym(void *ptr, const char *str) {}
int dlclose(void *ptr) {}
char *dlerror() {}
void *dlmopen(Lmid_t a, const char *str, int x) {}
int dladdr(void *ptr1, Dl_info *ptr2) {}
int dldump(const char *str1, const char *str2, int x) {}
int dlinfo(void *ptr1, int x, void *ptr2) {}
void *_dlopen(const char *str, int x) {}
void *_dlsym(void *ptr, const char *str) {}
int _dlclose(void *ptr) {}
char *_dlerror() {}
void *_dlmopen(Lmid_t a, const char *str, int x) {}
int _dladdr(void *ptr1, Dl_info *ptr2) {}
int _dldump(const char *str1, const char *str2, int x) {}
int _dlinfo(void *ptr1, int x, void *ptr2) {}
Y se compila con cc -c dlstubs.c |