符号表遇到的问题
本帖最后由 chaw899 于 2020-5-17 18:10 编辑参照下面这篇文章做的
http://blog.sina.com.cn/s/blog_4e3c6b480102zjsq.html
编译通过了,链接的时候报下面的错误。
我查了目标文件的符号,是这个符号lua_pushstring。
报错的是这个符号_imp__lua_pushstring
这2种符号是不一样的吗?
前面的是dll的符号表,后面的是给exe用的符号表吗?
lfs.o:lfs.c:.text+0x6e): undefined reference to `_imp__lua_pushstring'
lfs.o:lfs.c:.text+0xc7): undefined reference to `_imp__lua_pushstring'
lfs.o:lfs.c:.text+0xdc): undefined reference to `_imp__lua_pushstring'
lfs.o:lfs.c:.text+0xf6): undefined reference to `_imp__lua_pushstring'
lfs.o:lfs.c:.text+0x26e): undefined reference to `_imp__lua_pushinteger'
lfs.o:lfs.c:.text+0x29e): undefined reference to `_imp__lua_pushinteger'
lfs.o:lfs.c:.text+0x2ce): undefined reference to `_imp__lua_pushinteger'
lfs.o:lfs.c:.text+0x2fe): undefined reference to `_imp__lua_pushinteger'
lfs.o:lfs.c:.text+0x32f): undefined reference to `_imp__lua_pushinteger' 编译,链接环境是什么 直接使用的makefile么 Ayala 发表于 2020-5-17 18:30
编译,链接环境是什么 直接使用的makefile么
可以用makefile,编译环境mingw 没包含 lua$(LUA_VERSION).lib 吧 Ayala 发表于 2020-5-17 19:40
没包含 lua$(LUA_VERSION).lib 吧
谢谢提醒,我再试试看。 chaw899 发表于 2020-5-17 20:00
谢谢提醒,我再试试看。
你直接编译的lua的源代码还是使用的lua的 lib或者lua的dll? 源代码的话就不需要包含,但是需要重新编译lua的文件 然后链接 后面的只需要包含头文件 链接的时候选择lua 的lib Ayala 发表于 2020-5-17 20:08
你直接编译的lua的源代码还是使用的lua的 lib或者lua的dll? 源代码的话就不需要包含,但是需要重新编译l ...
我想实现lfs的功能。lfs是可以单独编译成dll的。
博客的文章是要把lfs打包进lua53.dll这个文件里去。
我按照教程操作没有成功。
如果要想实现lfs功能,是不是只要把lfs的代码单独编译成dll,
然后直接引用吗? chaw899 发表于 2020-5-17 21:12
我想实现lfs的功能。lfs是可以单独编译成dll的。
博客的文章是要把lfs打包进lua53.dll这个文件里去。
我 ...
lfs引用了 lua的一部分函数 直接封装成dll就需要挂着lua的 dll 或者链接lua的静态库 或者直接链接lua的obj才可以 Ayala 发表于 2020-5-17 21:29
lfs引用了 lua的一部分函数
为啥符号表的名字不一样呢?
_imp__lua_pushstring提示缺少这个
liblua.lib里面是这个符号lua_pushstring,
匹配不上应该如何解决? chaw899 发表于 2020-5-17 21:38
为啥符号表的名字不一样呢?
_imp__lua_pushstring提示缺少这个
liblua.lib里面是这个符号lua_pushstring ...
这个名字应该是需要链接动态库版本lua.dll 对应的lib 而不是静态库版本的lib 静态链接的时候用的是lua_pushstring这个符号,动态链接(使用dll的lib)使用的是_imp__lua_pushinteger这个符号。
使用_declspec(dllimport)修饰的函数声明,会对外导入_imp__开头的符号。 0xAA55 发表于 2020-5-18 14:53
静态链接的时候用的是lua_pushstring这个符号,动态链接(使用dll的lib)使用的是_imp__lua_pushinteger这 ...
发现这源码使用了比较新的c标准 ddk 7600 cl9.0 编译不了! Ayala 发表于 2020-5-18 17:30
发现这源码使用了比较新的c标准 ddk 7600 cl9.0 编译不了!
用c89转c99的工具试过吗? 0xAA55 发表于 2020-5-18 14:53
静态链接的时候用的是lua_pushstring这个符号,动态链接(使用dll的lib)使用的是_imp__lua_pushinteger这 ...
#if defined(LUA_BUILD_AS_DLL) /* { */
#if defined(LUA_CORE) || defined(LUA_LIB) /* { */
#define LUA_API __declspec(dllexport)
#else /* }{ */
#define LUA_API __declspec(dllimport)
#endif /* } */
#else /* }{ */
#define LUA_API extern
#endif /* } */
LUA_API的宏出现了2次,是不是我应该用extern的那个宏?
怎么解决问题?谢谢!
chaw899 发表于 2020-5-19 21:08
#if defined(LUA_BUILD_AS_DLL) /* { */
#if defined(LUA_CORE) || defined(LUA_LIB) /* { */
当你编译lua的时候,用export的宏,让DLL导出符号。
当你编译使用lua的dll的时候,用import的宏,从DLL导入符号。
页:
[1]