個人的なまとめ。

てきとーに何か書きます。

hostapd 2.6でpthread(Make編)

hostapdのソースコードを自分で変更してマルチスレッドでhostapdを起動させる必要が出てきた。
恐らく現時点でhostapdはシングルスレッドで動作をしているっぽい。

※ちなみにソースコードを変更したファイルは、hostapd-2.6/hostapd/main.cです

なので、Makeする時に

/usr/bin/ld: main.o: シンボル 'pthread_create@@GLIBC_2.2.5' への未定義参照です
//lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make: *** [hostapd] エラー 1
make: *** 未完了のジョブを待っています....

のエラーが吐かれてしまう。
さすがにこの為だけにMakeの勉強をするのは非常に野暮だなぁと思ったので、ひとつずつ片っ端から試してみました。


結果としては、Makefile内の609行目辺りにあるLIBSに-lpthreadを追加する。

 605: ifeq ($(CONFIG_TLS), openssl)
 606: ifdef TLS_FUNCS
 607: OBJS += ../src/crypto/tls_openssl.o
 608: OBJS += ../src/crypto/tls_openssl_ocsp.o
 609: LIBS += -lssl -lpthread
 610: endif

これでmakeする時にエラーが吐かれなくなりました。

自分の場合はmain.cだけを変更したのでMakefileの変更箇所は一箇所で済みましたが、他のファイルを変更する場合はまた別の箇所を変更する必要がありそうです。