gpt4 book ai didi

c - 使用特定版本的库

转载 作者:太空狗 更新时间:2023-10-29 12:23:42 24 4
gpt4 key购买 nike

我有一个用 C 语言编写的带有静态链接库的 Linux 程序。 library_x 的版本是例如1.0.1.

当我的程序在 PC 上被调用时,我的 library_x 版本 1.0.1 被加载并且它按预期工作。

但是当在 PC 上调用程序已经“加载”了另一个版本的 library_x,例如1.0.0,我的 library_x 1.0.1 不再加载了。在堆栈中,我可以看到我的代码调用被定向到 library_x 1.0.0。

这可以避免吗?如何强制我的代码使用我的 library_x 1.0.1?

最佳答案

我无法重现您的问题。我做的很简单,没有任何特别之处。为了重现,我在下面为您提供了所有详细信息。

如果您需要一些基本信息,您应该查看此页面: http://www.kaizou.org/2015/01/linux-libraries/

完整示例:

生成文件:

all: go1 go2

mylib.so.1: mylib.so.1.1.1
ln -s mylib.so.1.1.1 mylib.so.1

mylib.so.2: mylib.so.2.2.2
ln -s mylib.so.2.2.2 mylib.so.2

go1: main.cpp mylib.so.1.1.1 mylib.so.1
$(CXX) -O3 mylib.so.1.1.1 -Wall -pedantic -Wextra main.cpp -g -o go1

go2: main.cpp mylib.so.2.2.2 mylib.so.2
$(CXX) -O3 mylib.so.2.2.2 -Wall -pedantic -Wextra main.cpp -g -o go2

mylib.so.1.1.1: lib1.cpp
g++ -fPIC -Wl,-soname,mylib.so.1 -o mylib.so.1.1.1 -shared lib1.cpp

mylib.so.2.2.2: lib2.cpp
g++ -fPIC -Wl,-soname,mylib.so.2 -o mylib.so.2.2.2 -shared lib2.cpp

clean:
rm -f go*
rm -f main.o f1.o f2.o
rm -f mylib*.so.*

主要.cpp:

#include <unistd.h>
void f1();

int main()
{
sleep(2);
f1();
}

lib1.cpp:

#include <iostream>
void f1() { std::cout << "Version 1 " << std::endl; }

lib2.cpp:

#include <iostream>
void f1() { std::cout << "Version 2 " << std::endl; }

您可以通过以下方式调用它:

export LD_LIBRARY_PATH=.

go1 & go2

如您所见,两个版本并行运行并使用不同版本的共享库。所以我根本无法重现你的问题!

关于c - 使用特定版本的库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49534422/

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