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