gpt4 book ai didi

c++ - g++静态库依赖动态库

转载 作者:行者123 更新时间:2023-11-28 03:55:05 24 4
gpt4 key购买 nike

我有一些静态库。例如 libpuchuu.a它取决于动态库。例如 libSDL.so(当然我有 libSDL.a)libpuchuu.a 的创建很简单:

ar -rcs object_file_1.o object_file_2.o

但是我无法将我的项目与 libpuchuu.a 链接起来! undefined reference 攻击我的控制台!

我在某个论坛上看到这样一句话:静态库的所有依赖都在这个库中如果你的目标文件依赖于 y.a 你必须 unpack(ar) y.a 目标文件 到您的文件夹,然后将所有对象打包到您的新库中。问题:

  1. 这是真的吗?
  2. 如果是真的:目标文件 puchuu.o 依赖于 libSDL.a如何制作 libpuchuu.a?
  3. 另一个解决方案?

附言

我做了一个简单的例子并把它贴到pastebin:

http://paste.lisp.org/display/115456

构建命令:

g++ -O3 -c index.cpp -I/usr/local/include/SDL
g++ -O3 -c lib.cpp -I/usr/local/include/SDL
ar rv libpuchuu.a lib.o
g++ -O3 -o program.exe index.o -L/usr/local/lib -lmingw32 -lSDLmain -lSDL -mwindows -lSDL_image -L. -lpuchuu

...来自 index.cpp 的 undefined reference !

最佳答案

您是否尝试过将 -lSDL 添加到链接器的命令行?

undefined reference 是您试图在 lib.cpp 中定义的符号,您使用 ar 将其打包在 libpuchuu.a 中.不幸的是,您没有定义您认为正在定义的符号。 using namespace sdl; 不会自动使您定义的所有内容都位于 sdl 命名空间中。它所做的只是对其进行安排,以便当编译器查找特定名称时,它会在 sdl 命名空间和主命名空间中查找它。

您需要使用 namespace sdl { .... functions ... } 包装 lib.cpp 中定义的函数,您的代码将正常链接。

根据我的经验,当我在不熟悉的事情上犯错时,这个错误通常是一个非常愚蠢的错误,与我不熟悉的事情无关。但是因为我在未知领域工作,所以我自然而然地认为我对这个领域缺乏了解一定是我的错,而不是我做了一些愚蠢的事情。

您可能会发现我的经验适用。

另外,作为旁注,“ undefined reference 攻击你的控制台”的想法相当奇怪,并且在你尝试链接后给我留下了你的屏幕和键盘的图像留在冒烟的废墟中。

关于c++ - g++静态库依赖动态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3918643/

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