music 发表于 2020-5-17 18:06:33

符号表遇到的问题

本帖最后由 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'

Ayala 发表于 2020-5-17 18:30:20

编译,链接环境是什么 直接使用的makefile么

music 发表于 2020-5-17 18:35:29

Ayala 发表于 2020-5-17 18:30
编译,链接环境是什么 直接使用的makefile么

可以用makefile,编译环境mingw

Ayala 发表于 2020-5-17 19:40:01

没包含 lua$(LUA_VERSION).lib 吧

music 发表于 2020-5-17 20:00:55

Ayala 发表于 2020-5-17 19:40
没包含 lua$(LUA_VERSION).lib 吧

谢谢提醒,我再试试看。

Ayala 发表于 2020-5-17 20:08:22

chaw899 发表于 2020-5-17 20:00
谢谢提醒,我再试试看。

你直接编译的lua的源代码还是使用的lua的 lib或者lua的dll? 源代码的话就不需要包含,但是需要重新编译lua的文件 然后链接 后面的只需要包含头文件 链接的时候选择lua 的lib

music 发表于 2020-5-17 21:12:54

Ayala 发表于 2020-5-17 20:08
你直接编译的lua的源代码还是使用的lua的 lib或者lua的dll? 源代码的话就不需要包含,但是需要重新编译l ...

我想实现lfs的功能。lfs是可以单独编译成dll的。
博客的文章是要把lfs打包进lua53.dll这个文件里去。
我按照教程操作没有成功。

如果要想实现lfs功能,是不是只要把lfs的代码单独编译成dll,
然后直接引用吗?

Ayala 发表于 2020-5-17 21:29:14

chaw899 发表于 2020-5-17 21:12
我想实现lfs的功能。lfs是可以单独编译成dll的。
博客的文章是要把lfs打包进lua53.dll这个文件里去。
我 ...

lfs引用了 lua的一部分函数

Ayala 发表于 2020-5-17 21:31:34

直接封装成dll就需要挂着lua的 dll 或者链接lua的静态库 或者直接链接lua的obj才可以

music 发表于 2020-5-17 21:38:18

Ayala 发表于 2020-5-17 21:29
lfs引用了 lua的一部分函数

为啥符号表的名字不一样呢?
_imp__lua_pushstring提示缺少这个
liblua.lib里面是这个符号lua_pushstring,
匹配不上应该如何解决?

Ayala 发表于 2020-5-17 22:46:28

chaw899 发表于 2020-5-17 21:38
为啥符号表的名字不一样呢?
_imp__lua_pushstring提示缺少这个
liblua.lib里面是这个符号lua_pushstring ...

这个名字应该是需要链接动态库版本lua.dll 对应的lib 而不是静态库版本的lib

0xAA55 发表于 2020-5-18 14:53:22

静态链接的时候用的是lua_pushstring这个符号,动态链接(使用dll的lib)使用的是_imp__lua_pushinteger这个符号。

使用_declspec(dllimport)修饰的函数声明,会对外导入_imp__开头的符号。

Ayala 发表于 2020-5-18 17:30:31

0xAA55 发表于 2020-5-18 14:53
静态链接的时候用的是lua_pushstring这个符号,动态链接(使用dll的lib)使用的是_imp__lua_pushinteger这 ...

发现这源码使用了比较新的c标准 ddk 7600 cl9.0 编译不了!

music 发表于 2020-5-19 20:50:52

Ayala 发表于 2020-5-18 17:30
发现这源码使用了比较新的c标准 ddk 7600 cl9.0 编译不了!

用c89转c99的工具试过吗?

music 发表于 2020-5-19 21:08:21

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的那个宏?
怎么解决问题?谢谢!

0xAA55 发表于 2020-5-20 00:31:41

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]
查看完整版本: 符号表遇到的问题