gpt4 book ai didi

C 共享库 : No Such File or Directory Upon Execution

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:52:11 26 4
gpt4 key购买 nike

首先,这是一项编程作业,所以你知道。

无论如何,我想要做的是将我编写的共享库(来自先前项目的链接列表)包含在我正在编写的自己的 shell 中。我遇到的问题是,当我使用我的 Makfile 进行编译时,编译成功了。然后,当我尝试运行我的可执行文件(假设它称为 prog)时,我得到以下信息:

[terminal]# ./prog
./prog: error while loading shared libraries: libmylib.so: cannot open shared object file: No such file or directory

以下是我的文件结构供引用:

include
|_
common.h
List.h
Node.h
lib
|_
libmylib.a
libmylib.so
libsrc
|_
Makefile // This makefile builds the library correctly and puts it in lib via 'make install'
List.c
List.h
Node.c
Node.h
common.h
Makefile
prog.c

这是我的主要 Makefile

CC=gcc
CFLAGS=-g -Wall -Llib
LIBS=-lreadline -lncurses -lmylib

PROGS=library prog

all: $(PROGS)

library:
cd libsrc; make install

prog: prog.o
$(CC) $(CFLAGS) -o $@ $< $(LIBS)

clean:
cd libsrc; make installclean
/bin/rm -f *.o $(PROGS) a.out core *.log

感谢任何帮助或建议,谢谢!

最佳答案

运行时动态链接器不知道在哪里可以找到您的共享库。

两种选择:

  1. 设置 LD_LIBRARY_PATH 环境变量以包含您的 lib 目录的绝对路径:

    LD_LIBRARY_PATH=/path/to/lib

    导出 LD_LIBRARY_PATH

  2. 通过将 -R/path/to/lib 传递给链接器(例如,在你的 makefile,CFLAGS=... -Llib -R/path/to/lib

第一个选项是灵活的,因为共享库可以安装在任何地方,甚至可以移动到另一个位置,只要相应地更新环境变量,可执行文件就不会中断。但它确实要求用户(或系统管理员)必须正确设置环境。

第二个选项不允许将共享库从其预定义的安装目录中移出,但会删除对正确设置环境的依赖。

请注意,如果您将共享库安装在特定于标准系统的位置(例如 Unix/Linux 上的/usr/lib 或/usr/lib64),则无需执行任何操作,因为运行时链接器将搜索此类位置自动。

关于C 共享库 : No Such File or Directory Upon Execution,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26149345/

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