如何在共享库(c-linux)中访问可执行文件的全局变量
我想访问共享库中可执行文件的全局变量?我曾尝试使用option-export-dynamic进行编译,但没有成功 我试过使用extern关键字。这也不起作用 任何帮助或建议都是值得赞赏的 环境c-Linux 可执行文件:- tst.c 库:- tstLib.c如何在共享库(c-linux)中访问可执行文件的全局变量,c,linux,shared-libraries,C,Linux,Shared Libraries,我想访问共享库中可执行文件的全局变量?我曾尝试使用option-export-dynamic进行编译,但没有成功 我试过使用extern关键字。这也不起作用 任何帮助或建议都是值得赞赏的 环境c-Linux 可执行文件:- tst.c 库:- tstLib.c 由于我的代码非常大,我只给出了我在程序中使用的示例。它应该可以工作。顺便说一句,您的tst.c缺少#include。其main应返回int并以例如返回0结尾 与 我使用gcc-Wall-ctst.c第一个文件编译,使用gcc-Wall-c
由于我的代码非常大,我只给出了我在程序中使用的示例。它应该可以工作。顺便说一句,您的
tst.c
缺少#include
。其main
应返回int
并以例如返回0结尾代码>
与
我使用gcc-Wall-ctst.c
第一个文件编译,使用gcc-Wall-ctstlib.c
第二个文件编译。我把它建成了一个图书馆
ar r libtst.a tstlib.o
ranlib libtst.a
然后我用gcc-Wall-tst.o-L-ltst-o-tst
通常的做法是在库中附带一个头文件tstlib.h
,其中包含
#ifndef TSTLIB_H_
#define TSTLIB_H_
/* a useful explanation about tstVar. */
extern int tstVar;
/* the role of funInso. */
extern void funInso(void);
#endif /*TSTLIB_H */
并使tst.c
和tstlib.c
都包含#include“tstlib.h”
如果库是共享的,您应该
以独立于位置的代码模式编译库文件
gcc -Wall -fpic -c tstlib.c -o tstlib.pic.o
使用-shared
gcc -shared tstlib.pic.o -o libtst.so
请注意,您可以将共享对象链接到其他库。如果您的tstlib.c
正在调用gdbm\u open
,因此包含
,则可以将-lgdbm
附加到该命令中。这是共享库为您提供的静态库所没有的许多特性之一
将可执行文件链接到-rdynamic
gcc -rdynamic tst.o -L. -ltst -o tst
请花时间阅读您的tstVar变量可以在库中定义。您可以通过函数共享此变量:
setFunction
:编辑此变量
void setFunction (int v)
{
tstVar = v;
}
getFunction
:返回变量
int getFunction ()
{
return tstVar
}
你是如何尝试extern
关键字的?。它起作用了。给我们看看代码。@TioPepe我刚刚添加了示例代码:)您有什么问题?如果有,您会收到什么错误消息?你是如何建立图书馆的?如何构建可执行文件?
gcc -shared tstlib.pic.o -o libtst.so
gcc -rdynamic tst.o -L. -ltst -o tst
void setFunction (int v)
{
tstVar = v;
}
int getFunction ()
{
return tstVar
}