【问题标题】:G++ on windows: cannot fild -llua5.1Windows上的G ++:找不到-lua5.1
【发布时间】:2011-07-09 17:35:55
【问题描述】:

早上好,

我正在尝试使用 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,但仍然打印相同的错误消息。

先谢谢了。

【问题讨论】:

    标签: linker g++


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!现在可以了。我想如果我使用 code::blocks + minwg 编译它,如果我现在只使用 g++ 编译它应该可以工作。
    【解决方案2】:

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

    -llibluadll.dll.a
    

    如果你想链接libfoo.dll,正确的链接器标志是-lfoo(没有lib,没有dll)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-16
      相关资源
      最近更新 更多