G++在 Windows 上:无法归档 -llua5.1

发布于 2024-11-19 00:04:33 字数 1739 浏览 2 评论 0原文

早上好,

我正在尝试使用 bjam 二进制文件和 g++ (mingw) 构建 luabind。

Lua根目录位于'D:\Dev\lua-5.1.4\',

*.a文件在这里:'D:\Dev\lua-5.1.4\lib\libluadll.dll.a'

*.dll文件在这里: 'D:\Dev\lua-5.1.4\lib\luadll.dll'

所有这些 *.o 文件都编译得很好,但是当它开始链接它时,出了问题:

gcc.link.dll bin\gcc-mingw-4.4.1\debug\libluabindd.dll.a
d:/programms/codeblocks/mingw/bin/../lib/gcc/mingw32/4.4.1/../../../../mingw32/b
in/ld.exe: cannot find -llibluadll.dll.a
collect2: ld returned 1 exit status

"g++" -L"D:\Dev\lua-5.1.4\lib"  "-Wl,--out-implib,bin\gcc-mingw-4.4.1\debug\
libluabindd.dll.a" -o "bin\gcc-mingw-4.4.1\debug\libluabindd.dll"  -shared -Wl,-
-start-group "bin\gcc-mingw-4.4.1\debug\src\class.o" "bin\gcc-mingw-4.4.1\debug\
src\class_info.o" "bin\gcc-mingw-4.4.1\debug\src\class_registry.o" "bin\gcc-ming
w-4.4.1\debug\src\class_rep.o" "bin\gcc-mingw-4.4.1\debug\src\create_class.o" "b
in\gcc-mingw-4.4.1\debug\src\error.o" "bin\gcc-mingw-4.4.1\debug\src\exception_h
andler.o" "bin\gcc-mingw-4.4.1\debug\src\function.o" "bin\gcc-mingw-4.4.1\debug\
src\inheritance.o" "bin\gcc-mingw-4.4.1\debug\src\link_compatibility.o" "bin\gcc
-mingw-4.4.1\debug\src\object_rep.o" "bin\gcc-mingw-4.4.1\debug\src\open.o" "bin
\gcc-mingw-4.4.1\debug\src\pcall.o" "bin\gcc-mingw-4.4.1\debug\src\scope.o" "bin
\gcc-mingw-4.4.1\debug\src\stack_content_by_name.o" "bin\gcc-mingw-4.4.1\debug\s
rc\weak_ref.o" "bin\gcc-mingw-4.4.1\debug\src\wrapper_base.o"  -Wl,-Bstatic  -Wl
,-Bdynamic -llibluadll.dll.a -Wl,--end-group -g

...failed gcc.link.dll bin\gcc-mingw-4.4.1\debug\libluabindd.dll.a bin\gcc-mingw
-4.4.1\debug\libluabindd.dll...
...failed updating 2 targets...

所以,我重命名libluadll.dll.a 到 lua5.1,lua5.1.a,但它仍然打印相同的错误消息。

谢谢,提前。

Good morning,

I'm trying to build luabind using bjam binaries and g++ (mingw).

Lua root is in 'D:\Dev\lua-5.1.4\',

*.a file here: 'D:\Dev\lua-5.1.4\lib\libluadll.dll.a'

*.dll file here: 'D:\Dev\lua-5.1.4\lib\luadll.dll'

All these *.o files were compiled well, but when it started linking it, something went wrong:

gcc.link.dll bin\gcc-mingw-4.4.1\debug\libluabindd.dll.a
d:/programms/codeblocks/mingw/bin/../lib/gcc/mingw32/4.4.1/../../../../mingw32/b
in/ld.exe: cannot find -llibluadll.dll.a
collect2: ld returned 1 exit status

"g++" -L"D:\Dev\lua-5.1.4\lib"  "-Wl,--out-implib,bin\gcc-mingw-4.4.1\debug\
libluabindd.dll.a" -o "bin\gcc-mingw-4.4.1\debug\libluabindd.dll"  -shared -Wl,-
-start-group "bin\gcc-mingw-4.4.1\debug\src\class.o" "bin\gcc-mingw-4.4.1\debug\
src\class_info.o" "bin\gcc-mingw-4.4.1\debug\src\class_registry.o" "bin\gcc-ming
w-4.4.1\debug\src\class_rep.o" "bin\gcc-mingw-4.4.1\debug\src\create_class.o" "b
in\gcc-mingw-4.4.1\debug\src\error.o" "bin\gcc-mingw-4.4.1\debug\src\exception_h
andler.o" "bin\gcc-mingw-4.4.1\debug\src\function.o" "bin\gcc-mingw-4.4.1\debug\
src\inheritance.o" "bin\gcc-mingw-4.4.1\debug\src\link_compatibility.o" "bin\gcc
-mingw-4.4.1\debug\src\object_rep.o" "bin\gcc-mingw-4.4.1\debug\src\open.o" "bin
\gcc-mingw-4.4.1\debug\src\pcall.o" "bin\gcc-mingw-4.4.1\debug\src\scope.o" "bin
\gcc-mingw-4.4.1\debug\src\stack_content_by_name.o" "bin\gcc-mingw-4.4.1\debug\s
rc\weak_ref.o" "bin\gcc-mingw-4.4.1\debug\src\wrapper_base.o"  -Wl,-Bstatic  -Wl
,-Bdynamic -llibluadll.dll.a -Wl,--end-group -g

...failed gcc.link.dll bin\gcc-mingw-4.4.1\debug\libluabindd.dll.a bin\gcc-mingw
-4.4.1\debug\libluabindd.dll...
...failed updating 2 targets...

So, I renamed libluadll.dll.a into lua5.1, lua5.1.a, but it's still prints the same error message.

Thanks, beforehand.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

來不及說愛妳 2024-11-26 00:04:33

首先,-l{name}指令搜索lib{name}.dlllib{name}.a。因此,您的应该是 -llua,而不是 -llibluadll.dll.a

其次,Lua库也是用g++编译的吗?不同编译器编译的目标文件和库通常是不兼容的。

Firstly, -l{name} directive searches for lib{name}.dll and lib{name}.a. So, yours should be -llua, not -llibluadll.dll.a.

Secondly, are Lua libraries compiled with g++ too? Object files and libraries compiled by different compilers are incompatible in general.

两仪 2024-11-26 00:04:33

g++ 命令行的这一部分是错误的:

-llibluadll.dll.a

如果您想链接到 libfoo.dll,正确的链接器标志是 -lfoo(不库,无 dll)。

如果您有静态存档并且需要静态链接,只需命名该存档,不带 -l 前缀(如果未找到,请指定路径)。

This part of the g++ command line is wrong:

-llibluadll.dll.a

If you want to link against libfoo.dll, the right linker flag is -lfoo (no lib, no dll).

If you have a static archive and you want a static link, just name the archive, with no -l prefix (and specify a path if it's not found).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文