2013-06-14 6 views
0

У меня есть программа, которую используют Libevent библиотекикак скрытые динамическое связывание статики связывания

при компиляции программы, компиляции команд, как:

gcc -o myprogram mysource.c mysource.h -levent 

поэтому динамическое связывание.

сейчас я хочу запустить эту программу на компьютере, где нет libevent, Мне нужна статическая ссылка, чтобы моя программа могла быть запущена на этом компьютере, Есть ли какие-нибудь простые шаги?

Я попытался -static, но я получил следующее сообщение об ошибке:

[[email protected] relay]# gcc -o relay -static mysource.c mysource.h -levent -lpcap 
    /usr/bin/ld: cannot find -lpcap 
    /usr/bin/ld: cannot find -lc 
    collect2: ld returned 1 exit status 

почему?

ответ

0

Вы должны libevent.a. Тогда вы можете просто gcc -o myprogram mysource.c libevent.a.

Попробуйте gcc -o myprogram -static mysource.c -levent.

(И вы, вероятно, не следует указывать mysource.h для GCC, как это, скорее всего, входит в mysource.c с #include "mysource.h".)

+0

, если у меня есть несколько разделяемой библиотеке, как -lpcap, -levent, и я только хочу статически связывать libevent, но динамически связывать libpcap, возможно ли это или нет? благодаря! – misteryes

+0

Затем не указывайте опцию '-static', но передайте' libevent.a' в компоновщик (как в первой команде) и добавьте '-lpcap'. – Inspired

+0

Я пробовал 'gcc -o relay -static mysource.c mysource.h /usr/local/lib/libevent.a -lpcap', но у меня были ошибки: например' /home/wgong/Downloads/package/libevent-1.4. 14b-stable/event.c: 150: неопределенная ссылка на clock_gettime'. Зачем? – misteryes

1

От GCC documentation:

-static

On systems that support dynamic linking, this prevents linking with the shared libraries. On other systems, this option has no effect.

 Смежные вопросы

  • Нет связанных вопросов^_^