Mac OS X(El Capitan)でmake
を使用して、Linuxで動作するプログラムをコンパイルしようとしています。プログラムはUSBライブラリを利用します。私はこれらのライブラリが見つかるようにconfig.mkファイルを修正しなければならなかったが、今はコンパイル(宣言されていない識別子)でエラーに終わる。ソースへMac OS XでLinuxプログラムをコンパイルする
リンク:https://github.com/pali/0xFFFF
それはusblib-compatの一部のように思われ、usb.hが必要です。私はbrew install usblib-compat
で後者をインストールしました。しかし、usb.hとライブラリのシンボリックリンクは、それぞれ/ usr/local/includeと/ usr/local/libにあります。 。
多くの試験の後、何とか進歩しました。つまり、config.mkというファイルはmakeの処理中にはっきりと読み込まれますが、これがどのように行われたかはわかりません。とにかく、私は2つの行はコメントに気づい:(。。精度のために、オリジナルのconfig.mkにローカルディレクトリは、PKGのディレクトリに置き換えられました、私はこれらの行でそれを置き換える)
CPPFLAGS += -I/usr/local/include
LDFLAGS += -L/usr/local/lib -Wl,-R/usr/local/lib
は
私はそれらのコメントを外し、何かが起こった:usb.hが見つかりました。私は、これらの変数定義の最初のものは、ヘッダファイルをどこで探すべきかをコンパイラに伝え、2つ目はライブラリを探す場所をリンカに教えてくれると思いますが、もう一度私には分かりません。
いずれにしても、私はまだ問題があります。すなわち、make'ingプロセスは、2つの警告やエラーを出力し、その後、停止します。私はそれが移植されるべきだと思うが、
usb-device.c:90:57: warning: unused parameter 'udev' [-Wunused-parameter]
static void usb_reattach_kernel_driver(usb_dev_handle * udev, int interface) {
^
usb-device.c:90:67: warning: unused parameter 'interface' [-Wunused-parameter]
static void usb_reattach_kernel_driver(usb_dev_handle * udev, int interface) {
usb-device.c:324:13: error: use of undeclared identifier 'RTLD_DEFAULT' if (dlsym(RTLD_DEFAULT, "libusb_init"))
は、このプログラムは、LinuxからMacにポートすることは困難であるようです。誰かが(Linuxディストリビューションを運営しているのとは別に)何をすべきかについて考えがあれば、それは非常に感謝しています。
EDIT
dlfcn.hには、以下があります。
#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
#define RTLD_NOLOAD 0x10
#define RTLD_NODELETE 0x80
#define RTLD_FIRST 0x100 /* Mac OS X 10.5 and later */
/*
* Special handle arguments for dlsym().
*/
#define RTLD_NEXT ((void *) -1) /* Search subsequent objects. */
#define RTLD_DEFAULT ((void *) -2) /* Use default search algorithm. */
#define RTLD_SELF ((void *) -3) /* Search this and subsequent objects (Mac OS X 10.5 and later) */
#endif /* not POSIX */
これは自由な質問ではありません!あなたは何をコンパイルしようとしているのか、何を変更したのか、エラーコードのコピーのコピー、コンパイラコマンドなどを伝える必要があります。 apple.seにリンクするだけでは不十分です –
どのUSBライブラリですか?これらのライブラリはデフォルトでMac上で利用できますか?ライブラリをMacに移植しましたか?コードがLinux特有の関数呼び出しを掘り下げない場合(プログラム内であろうとUSBライブラリ内であろうと)、あなたはOKであるはずです。コードがLinuxのみの呼び出しを使用している場合や、LinuxとMacで異なる呼び出しを使用している場合は、そのポートでさらに作業する必要があります。私は[Ask Different](https://apple.stackexchange.com)の人たちがその質問をトピックとみなしているとは確信していません。 USBライブラリはどこにありますか?そのようなことは、システム固有のものになりがちです。 –
@AnttiHaapalaすべての詳細を編集しました。それはまだ保留にする必要がありますか? – Enrico