Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
linux中链接库与c程序的问题_C_Linux_Static Libraries_Beagleboneblack - Fatal编程技术网

linux中链接库与c程序的问题

linux中链接库与c程序的问题,c,linux,static-libraries,beagleboneblack,C,Linux,Static Libraries,Beagleboneblack,我想运行从Bealgebone到4Dsystems显示器的串行命令。因此,我将找到的c库复制到一个目录中,并创建了一个测试程序main.c: #include "Picaso_const4D.h" #include "Picaso_Serial_4DLibrary.h" int main(int argc,char *argv[]) { OpenComm("/dev/ttyUSB0", B115200); // Matches with the display "Comms" ra

我想运行从Bealgebone到4Dsystems显示器的串行命令。因此,我将找到的c库复制到一个目录中,并创建了一个测试程序main.c:

#include "Picaso_const4D.h" 
#include "Picaso_Serial_4DLibrary.h"

int main(int argc,char *argv[])
{
    OpenComm("/dev/ttyUSB0", B115200);  // Matches with the display "Comms" rate
    gfx_BGcolour(0xFFFF);
    gfx_Cls();
    gfx_CircleFilled(120,160,80,BLUE);
    while (1) {}
}
现在当我做gcc-omain.c时,它说

main.c:2:37:致命错误:Picaso_Serial_4DLibrary.h:没有此类文件或 目录

因此,我尝试将其链接:

gcc main.c  -L. -lPICASO_SERIAL_4DLIBRARY
这给了我同样的错误。然后我尝试创建一个静态库:

gcc -Wall -g -c -o PICASO_SERIAL_4DLIBRARY PICASO_SERIAL_4DLIBRARY.C
这就给了我:

PICASO_SERIAL_4DLIBRARY.C:1:21:致命错误:windows.h:没有这样的文件 或目录编译已终止

我做错了什么?git页面明确指出,这个库是为不运行windows的用户创建的


提前谢谢

您没有收到链接器错误;你得到了一个预处理器错误。具体来说,预处理器找不到Picaso_Serial_4DLibrary.h。确保它在您的include路径中;您可以使用gcc的
-I
参数将目录添加到include路径。

您没有收到链接器错误;你得到了一个预处理器错误。具体来说,预处理器找不到Picaso_Serial_4DLibrary.h。确保它在您的include路径中;您可以使用gcc的
-I
参数将目录添加到include路径。

您遇到了两个问题。首先是找不到的picaso_whatever.h文件。你用你加上的-I修正了这个问题。但是,现在picaso.h想要
windows.h

你在建什么?WinX还是BSD/Linux

如果您是在WinX上编译,则需要安装visual studio的“平台sdk”

如果您正在使用mingw或cygwin,则需要执行其他操作

如果在WinX上,则将cd发送到C:目录。执行
查找-键入f-name windows.h
并为包含的目录添加a-I

如果在Linux下,则在源代码树顶层重复查找。否则,可能需要安装一些兼容的跨构建库

或者,您必须找到包含它的WinX,因为Picaso清楚地包含了它。你可以试着为它评论一个或多个“包含”,看看事情是好是坏

如果你找不到一个真实的,创建一个空的windows.h并添加-I,看看事情有多糟(或好)

您可能需要mingw交叉编译器。看

更新:

好的。。。哇!你在正确的轨道上,很接近,但在我看来,这是丑陋的WinX东西

Picaso的主要需求是获得串行通信端口连接,因此从windows.h中获得的需求[谢天谢地]是最小的。它需要WORD、DWORD等的基本样板定义

mingw或cygwin将提供自己的windows.h副本。这些是“洁净室”的重新实施,因此没有版权问题

mingw是编译/构建工具的集合,允许您使用gcc/ld/make构建实用程序

cygwin更像是:我想要一个类似于BSD/Linux的完整shell环境。您可以获得bash、ls、gcc、tar以及您想要的任何GNU实用程序

注意:我使用cygwin,但从未使用mingw。windows.h的mingw版本[及其下面包含的一套.h文件]是开源的,可以被其他项目(例如cygwin、wine)重用

在Linux下,wine(windows emulator)是一个程序/套件,它试图允许您在Linux下运行WinX二进制文件(例如wine mywinpgm)

我用git克隆了Picaso库,在做了一些修改后,我将它指向wine版本的windows.h,然后将其编译

Picaso的OpenComm正在执行CreateFile[一个win32 API调用]。所以,你可能需要cygwin。您正在打开/dev/ttyUSB0/dev/*表示cygwin。但是,/dev/ttyUSB0是一个类似于Linux的名称。您可能需要一些WinX样式的名称,如“COM:”或其他名称。在cygwin终端[它会给您一个bash提示符]下,执行ls/dev并查看可用的内容

您可以从以下位置获取cygwin:如果您有64位系统,请确保使用64位版本的安装程序:setup-x86_64.exe它是半图形化的,需要两个目录,一个用于“根”FS,另一个用于存储包。在我的系统上,我使用C:\cygwin64和C:\cygwin64_包——YMMV

请注意,默认情况下安装程序不会安装gcc。您可以[以图形方式]选择要安装的软件包。您可能还需要一些“devel”包。它们有非开发人员不需要的库和.h文件。正如文档提到的,您可以根据需要随时重新运行安装程序。您可以添加忘记指定的软件包,甚至可以删除已安装但不再需要的软件包

请记住,您需要适当地调整makefile-I和/或-L选项。此外,在构建picaso库时,gcc生成了大量关于“大整数”溢出的警告。代码正在执行:

#define control_code -279
unsigned char buf[2];
buf[0] = control_code >> 8;
buf[1] = control_code;
代码是正确的,警告是正确的[因为代码是草率的]。如果代码执行了以下操作:

#define control_code -279
unsigned char buf[2];
buf[0] = (unsigned) control_code >> 8;
buf[1] = (unsigned) control_code;

它可能会保持沉默。在Makefile中使用-Wno-overflow来消除警告,而不是编辑大约50行的警告。首先是找不到的picaso_whatever.h文件。你用你加上的-I修正了这个问题。但是,现在picaso.h想要
windows.h

你在建什么?WinX还是BSD/Linux

如果您是在WinX上编译,则需要安装visual studio的“平台sdk”

如果您正在使用mingw或cygwin,则需要执行其他操作

如果在WinX上,则将cd发送到C:目录。执行
查找-键入f-name windows.h
并为包含的目录添加a-I

如果在Linux下,则在源代码树顶层重复查找。否则,可能需要安装一些兼容的跨构建库

或者,您必须找到包含它的WinX,因为Picaso清楚地包含了它。你可以试着为它评论一个或多个#include,看看事情是否是b