我試圖在Mac OS X(El Capitan)下使用make
編譯我知道在Linux下工作的程序。該程序使用USB庫。我不得不修改config.mk文件來找到這些庫,但是現在我最終在編譯時出現了錯誤(未聲明的標識符)。在Mac OS X下編譯Linux程序
鏈接到源:https://github.com/pali/0xFFFF
它需要usb.h,這似乎是usblib-COMPAT的一部分。我安裝了後者brew install usblib-compat
。但仍然無法看到usb.h,但我知道它在哪裏:具體而言,usb.h和庫的符號鏈接可分別在/ usr/local/include和/ usr/local/lib下找到。
經過多次試驗,我以某種方式進步。也就是說,在製作過程中,文件config.mk被清晰地讀取,但我不得不承認,我不清楚這是如何完成的;反正,我注意到兩行註釋:(。爲精確起見,在原config.mk的本地目錄是由PKG DIR取代我取代了它在這幾行)
CPPFLAGS += -I/usr/local/include
LDFLAGS += -L/usr/local/lib -Wl,-R/usr/local/lib
我取消了他們的評論,現在發生了一些事情:找到了usb.h。我認爲這些變量定義中的第一個告訴編譯器在哪裏查看頭文件,第二個告訴鏈接器在哪裏查找庫 - 但是這一點對我來說並不完全清楚。
無論如何,我仍然有問題。也就是說,make'ing過程輸出兩個警告和錯誤,然後停止:
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庫中 - 你應該沒問題。如果代碼使用僅限Linux的調用或Linux和Mac之間不同的調用,則必須在端口上更加努力。我不相信在[Ask Different](https://apple.stackexchange.com)上的人會在題目上考慮這個問題。 USB庫從哪裏來?這些東西很容易成爲系統特定的。 –
@AnttiHaapala編輯了所有細節。它是否仍然處於等待狀態? – Enrico