C++ g++;静态库依赖于动态库

C++ g++;静态库依赖于动态库,c++,c,build,mingw,gnu-make,C++,C,Build,Mingw,Gnu Make,我有一些静态库。例如libpuchuu.a 它依赖于动态库。例如libSDL.so (当然,我有libSDL.a) 创建libpuchuu.a很简单: ar -rcs object_file_1.o object_file_2.o 但是我不能把我的项目和libpuchuu.a联系起来! 未定义的引用攻击我的控制台 在一些论坛上,我发现了这样一句话: 静态库的所有依赖项都在此库中 如果对象文件依赖于y.a,则必须解压缩(ar)y.a对象文件 到文件夹中,然后将所有对象打包到新库中。问题: 这是真

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

ar -rcs object_file_1.o object_file_2.o
但是我不能把我的项目和libpuchuu.a联系起来! 未定义的引用攻击我的控制台

在一些论坛上,我发现了这样一句话: 静态库的所有依赖项都在此库中 如果对象文件依赖于y.a,则必须解压缩(ar)y.a对象文件 到文件夹中,然后将所有对象打包到新库中。问题:

  • 这是真的吗
  • 如果是真的: 对象文件puchuu.o依赖于libSDL.a 如何制作libpuchuu.a
  • 另一个解决方案
  • PS

    我制作了一个简单的示例并将其发布到pastebin:

    建筑命令:

    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的未定义引用

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

    未定义的引用是指您试图在
    lib.cpp
    中定义的符号,您使用
    ar
    将其打包到
    libpuchuu.a
    。不幸的是,您没有定义您认为正在定义的符号<代码>使用名称空间sdl不会自动导致您定义的所有内容都位于
    sdl
    命名空间中。它所做的只是对其进行排列,以便当编译器查找特定名称时,它会在
    sdl
    名称空间以及主名称空间中查找该名称

    您需要将
    lib.cpp
    中定义的函数包装为
    namespace sdl{….functions…}
    ,您的代码就可以链接了

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

    你可能会发现我的经验是适用的


    另外,顺便说一句,“未定义的引用攻击你的控制台”的想法相当有趣奇怪,在你尝试链接后,给我留下了一张你的屏幕和键盘的图像,这些图像被烟熏得一塌糊涂。

    。但是未定义的引用攻击@puchu-添加
    -lSDL
    应该可以解决您的问题。如果您提供有关您正在运行的确切命令的更多详细信息,那么实际问题可能会被发现,隐藏在隐藏的地方。>>未定义的引用是指您在lib.cpp中定义的符号。正如你们所看到的,答案是如何修复它。只需写下……您应该详细说明出现了哪些未定义的引用。这可能会导致共享对象丢失。请将其作为文本而不是图像包含进来好吗?哦,天哪,那里有一条关于sdldraw的俄罗斯警告!!(那应该很糟糕。):)我想我不能打开7z文件。是的,我来自白俄罗斯。但所有的钱都在我们身上。我们应该试着写英语和说英语^_w_^