gpt4 book ai didi

在 C/C++ 中创建库 - ld 找不到我的库

转载 作者:太空宇宙 更新时间:2023-11-04 00:27:49 25 4
gpt4 key购买 nike

我正在尝试学习如何在 Linux 环境中创建 C/C++ 库,但我遇到了在线教程未能帮助解决的问题(可能是微不足道的问题)。

为了明确起见,假设我有一个包含以下代码的 foo.c 文件:

//file: foo.c
#include <stdio.h>
void hello(void)
{
printf("hello!\n");
}

一个 foo.h:

//file: foo.h
void hello(void);

还有一个使用 foo.c 中的函数 hello() 的程序,名为 prog.c:

//file: prog.c

#include "foo.h"

int main(void)
{
hello();
return 0;
}

这三个文件都在同一个目录下。然后我用以下代码编译了 foo.c:

gcc -fPIC -c foo.c

并得到一个 foo.o 文件。然后我使用 ld 创建库文件:

ld -G foo.o -o libfoo.so

但是当我尝试编译 prog.c 时:

gcc -o prog prog.c -lfoo

我收到一条错误消息:

/usr/bin/ld: cannot find -lfoo
collect2: ld returned 1 exit status

我确信这是某种微不足道的路径问题,但我找不到解决方案。所以我的问题是,如果上面的过程是错误的,或者我是否必须将 libfoo.so 文件放在一个特殊的路径中。

另一个问题是,如果我使用 g++ 而不是 gcc,这会发生什么变化。

谢谢。

编辑:

我知道我可以将 prog.c 和 foo.c 编译为 prog.o 和 foo.o,然后链接它们以生成可执行文件。但在我最初的问题中,我想以一种可以分发给将在他们自己的程序中使用我的函数的人的方式编译 foo.c。

最佳答案

ld 默认不搜索当前目录。如果你想让它这样做,你需要使用 -L 命令行选项,所以如果你的库在当前目录中,你需要添加 -L. 到最后一次 gcc 调用。如果库是动态链接的,您还需要将当前目录添加到环境变量 LD_LIBRARY_PATH(我假设您使用的是 linux)。

当然,如果您的库位于任何其他非标准路径中,您需要使用该路径而不是当前目录。

关于在 C/C++ 中创建库 - ld 找不到我的库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/927469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com