OSX:C脚本可编译,但I';我有一个链接错误
我在编译两个C脚本时遇到问题。我已经下载了这些文件,它们是一组示例,应该允许我与LabJack接口。目前我的目录中有OSX:C脚本可编译,但I';我有一个链接错误,c,gcc,terminal,linker,C,Gcc,Terminal,Linker,我在编译两个C脚本时遇到问题。我已经下载了这些文件,它们是一组示例,应该允许我与LabJack接口。目前我的目录中有u3.h、u3.c和lj.c(代码如下所示)。u3.h和u3.c文件很长,因此我发现不适合显示整个内容 相反,我想展示c文件中包含的内容,因为我认为这是我误解的地方 #include "u3.h" #include <stdlib.h> 我遇到的错误是当我尝试链接终端中的文件时,尽管每个文件都是单独编译的。在我使用的终端 $ gcc lj.c u3.c -o test
u3.h
、u3.c
和lj.c
(代码如下所示)。u3.h
和u3.c
文件很长,因此我发现不适合显示整个内容
相反,我想展示c
文件中包含的内容,因为我认为这是我误解的地方
#include "u3.h"
#include <stdlib.h>
我遇到的错误是当我尝试链接终端中的文件时,尽管每个文件都是单独编译的。在我使用的终端
$ gcc lj.c u3.c -o test
我得到以下错误:
Undefined symbols for architecture x86_64:
"_LJUSB_CloseDevice", referenced from:
_openUSBConnection in u3-fab2dd.o
_closeUSBConnection in u3-fab2dd.o
"_LJUSB_GetDevCount", referenced from:
_openUSBConnection in u3-fab2dd.o
"_LJUSB_OpenDevice", referenced from:
_openUSBConnection in u3-fab2dd.o
"_LJUSB_Read", referenced from:
_openUSBConnection in u3-fab2dd.o
_getCalibrationInfo in u3-fab2dd.o
_I2C in u3-fab2dd.o
_ehConfigIO in u3-fab2dd.o
_ehFeedback in u3-fab2dd.o
_ehConfigTimerClock in u3-fab2dd.o
"_LJUSB_Write", referenced from:
_openUSBConnection in u3-fab2dd.o
_getCalibrationInfo in u3-fab2dd.o
_I2C in u3-fab2dd.o
_ehConfigIO in u3-fab2dd.o
_ehFeedback in u3-fab2dd.o
_ehConfigTimerClock in u3-fab2dd.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我不确定问题出在哪里,我在网上查过了,但还没有找到任何我能理解并尝试实施的解决方案 您需要链接到实际的LabJack库。此库的源文件位于存储库的目录中;或者,您可以在应用程序中包含
labjackusb.c
您还需要针对libusb进行链接。这是一个单独的项目,可以通过以下工具安装在Mac上。通过搜索架构x86_64的未定义符号,在这里找到的3000多个现有问题和答案中,没有一个能够提供帮助?我以为我已经处理过Labjack库,但似乎我不理解这个问题。duskwuff提供的答案非常有用!我将
labjack.c
文件添加到我的目录中,但是libusb
仍然出现错误。我以前安装过它,并假设它在我的系统目录中,但可能不是。我刚刚用gcc lj.c u3.c labjackusb.c-o cff_c`pkg config--libs--cflags libusb-1.0`指定了这个库,这似乎是可行的。不知道为什么它不会像其他库那样链接。libusb不是macOS的标准组件,所以必须使用pkg config来链接它是正常的。
$ gcc lj.c u3.c -o test
Undefined symbols for architecture x86_64:
"_LJUSB_CloseDevice", referenced from:
_openUSBConnection in u3-fab2dd.o
_closeUSBConnection in u3-fab2dd.o
"_LJUSB_GetDevCount", referenced from:
_openUSBConnection in u3-fab2dd.o
"_LJUSB_OpenDevice", referenced from:
_openUSBConnection in u3-fab2dd.o
"_LJUSB_Read", referenced from:
_openUSBConnection in u3-fab2dd.o
_getCalibrationInfo in u3-fab2dd.o
_I2C in u3-fab2dd.o
_ehConfigIO in u3-fab2dd.o
_ehFeedback in u3-fab2dd.o
_ehConfigTimerClock in u3-fab2dd.o
"_LJUSB_Write", referenced from:
_openUSBConnection in u3-fab2dd.o
_getCalibrationInfo in u3-fab2dd.o
_I2C in u3-fab2dd.o
_ehConfigIO in u3-fab2dd.o
_ehFeedback in u3-fab2dd.o
_ehConfigTimerClock in u3-fab2dd.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)