0

我正在做一个需要我下载和使用的项目。在下载的文件夹中,提取后我会看到三件事:

  1. 一个名为“包含”的文件夹
  2. 一个名为“src”的文件夹
  3. 一个名为“Makefile”的文件

经过一番研究,我发现我必须导航到包含这些文件的目录,然后输入命令make

它似乎在我的系统中安装了库。所以我尝试了一个应该使用库的示例代码:

csp_conn_t * conn;
csp_packet_t * packet;
csp_socket_t * socket = csp_socket(0);
csp_bind(socket, PORT_4);
csp_listen(socket, MAX_CONNS_IN_Q);

while(1) {
    conn = csp_accept(socket, TIMEOUT_MAX);
    packet = csp_read(conn, TIMEOUT_NONE);
    printf(“%S\r\n”, packet->data);
    csp_buffer_free(packet);
    csp_close(conn);
}

这就是为代码的示例服务器端提供的所有内容。所以我决定将这些添加到顶部:

#include <csp.h>
#include <csp_buffer.h>
#include <csp_config.h>
#include <csp_endian.h>
#include <csp_interface.h>
#include <csp_platorm.h>

以为我走在正确的轨道上,我尝试用 gcc 编译代码,但出现了这个错误:

csptest_server.c:1: fatal error: csp.h: No such file or directory
compilation terminated.

我想我可能没有正确安装库,但是为了确保,我发现我可以通过运行这个命令来检查,并得到这个结果:

find /usr -iname csp.h
/usr/src/linux-headers-2.6.35-28-generic/include/config/snd/sb16/csp.h
/usr/src/linux-headers-2.6.35-22-generic/include/config/snd/sb16/csp.h

所以看起来 csp.h 已安装,也许我在标题包含行中错误地引用了它?有什么见解吗?非常感谢。

4

2 回答 2

2

make命令可能只是构建库,而不是安装它。你可以试试sudo make install。这是“常用”方法,但我建议您查看库的文档(如果有)。

sudo仅当您无权写入系统的包含和库目录时才需要该命令,这可能是您的情况。

另一种可能性(而不是安装库)是告诉 GCC 库的源代码和生成的二进制文件的位置(通过gcc命令的 -I 和 -L 选项。

于 2012-08-15T13:56:39.697 回答
2

该 Makefile 不会安装任何东西,只是将源代码转换为二进制格式。

Linux内核中的csp.h与您的项目无关,它只是命名冲突,可能发生在三个字母名称中。

在您的情况下,我假设您需要将包含目录添加到服务器的编译标志中,例如gcc -I/path/to/csp/include/csp csptest_server.c.

(接下来,您将遇到链接器错误,因为您还需要指定-L/path/to/csp -lcsp以便链接器可以找到要链接的二进制代码。)

于 2012-08-15T13:59:34.840 回答