2

静的ライブラリを作成する必要があり (動的ライブラリを作成するオプションではありません)、この静的ライブラリにはtimer_createfromなどを使用する関数がありますtime.h

somelib.h:

#include <time.h>

int do_something(void);

somelib.c:

int do_something(void){
        timer_t timer;
        struct sigevent sevp;
        sevp.sigev_notify = SIGEV_SIGNAL;
        sevp.sigev_signo = SIGRTMIN;
        sevp.sigev_value.sival_ptr = NULL;
        int ret = timer_create(CLOCK_MONOTONIC, &sevp, &timer);
        timer_delete(timer);
        return 0;
}

コードは実際には無意味であり、次のような私の問題を説明するために librt にリンクする必要があります。

somelib.c をコンパイルした後:

gcc -c -o somelib.o somelib.c -lrt

静的ライブラリを作成します。

ar rcs somelib.a somelib.o

それに対してリンクすると、次のエラーが発生します。

gcc -o someexec someexec.c -lrt ./somelib.a

戻り値:

somelib.c:(.text+0x30): undefined reference to `timer_create'
somelib.c:(.text+0x44): undefined reference to `timer_destroy'

これは私の問題の最小限の例です。これを修正できるかどうかはわかりませんが、私の理解では、静的ライブラリは作成時にlibrtの場所を知る必要があり、動的であるため、静的ライブラリにリンクしないと不可能であるということでした。 librt のバージョン。それでも私は静的ライブラリをあまり使用しないので、このようなことを行う方法があるかどうか知りたい.

コンパイラのバージョン: gcc 4.8.1 他のフラグは設定されていません。

4

1 に答える 1