静态库的反射调用静态方法使用//漏下什么了

Linux 中,在使用g++编译、连接程序时,怎样调用多个静态库文件?_百度知道
Linux 中,在使用g++编译、连接程序时,怎样调用多个静态库文件?
a、连接程序时?或者能写一个makefile也可以(操作系统,和libpthread,我写了一个程序,我应该如何写参数呢,要用到库libtest比如,在用g++编译,libX11.a.a。谢谢:Ubuntu Linux)
a的位置在&#47.a和usr&#47.a在当前目录下;lib,libtest我找到libX11
提问者采纳
c libtest.a libX11;usr&#47.a libpthread:gcc -L/lib指定库文件的查找路径;usr&#47在编译命令行中;lib myprop.a -o myprop其中-L&#47。比如,将使用的静态库文件放在源文件后面就可以了,编译器默认在当前目录下先查找指定的库文件
提问者评价
其他类似问题
为您推荐:
静态库的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁MFC程序下,关于静态lib库的调用上的连接问题 - rainduck - 博客园
问题起源:
 Linking...libc.lib(crt0dat.obj) : error LNK2005: _exit already defined in msvcrtd.lib(MSVCRTD.dll)libc.lib(crt0dat.obj) : error LNK2005: __exit already defined in msvcrtd.lib(MSVCRTD.dll)libc.lib(crt0init.obj) : error LNK2005: ___xc_z already defined in msvcrtd.lib(cinitexe.obj)libc.lib(crt0init.obj) : error LNK2005: ___xc_a already defined in msvcrtd.lib(cinitexe.obj)libc.lib(crt0init.obj) : error LNK2005: ___xi_z already defined in msvcrtd.lib(cinitexe.obj)libc.lib(crt0init.obj) : error LNK2005: ___xi_a already defined in msvcrtd.lib(cinitexe.obj)LINK : warning LNK4098: defaultlib "msvcrtd.lib" conflicts wi use /NODEFAULTLIB:librarymsvcrtd.lib(cinitexe.obj) : warning LNK4098: defaultlib "libc.lib" conflicts wi use /NODEFAULTLIB:library.
问题分析:
提示库冲突,那么vc6下,工程-&设置-&连接,分类里边的输入,然后在忽略库里边写上libc.lib,以此来屏蔽该库。
接下来提示:
Linking...libcp.lib(xmbtowc.obj) : error LNK2001: unresolved external symbol __pctypelibcp.lib(xmbtowc.obj) : error LNK2001: unresolved external symbol _errnolibcp.lib(xmbtowc.obj) : error LNK2001: unresolved external symbol ___mb_cur_maxlibcp.lib(xmbtowc.obj) : error LNK2001: unresolved external symbol ___lc_codepagelibcp.lib(xmbtowc.obj) : error LNK2001: unresolved external symbol ___lc_handle
可见上面的方法还不能解决问题。
细细想来,程序结构是mfc程序+静态lib库,mfc调用了lib库的导出函数。
问题产生原因是因为,在mfc程序默认是使用mfc作为共享dll,而lib库则是静态编译的。所以应该程序改为使用mfc作为静态链接库。
vc6下,工程-&设置-&常规,将默认的使用mfc作为共享dll改为,使用mfc作为静态链接库。
忽略库:libc.lib1548人阅读
C和C++语言(27)
那么此时它是动态调用呢?还是静态库B在进行编译时会把动态库A的A_Function()函数的相关代码拷贝过来,运行时进行静态调用呢?
经过写程序测试,终于得出结论:是动态调用。即静态库对动态库的调用仍然是动态调用。也就是说如果我写了个程序C,它调用静态库B的函数B_Function()的话,我们不仅在编译程序C需要动态库A,而且运行程序C时仍然需要动态库A
测试程序共有3个目录src,src2,src3
src目录下有两个文件robinDynamic.h,robinDynamic.c.
它们用于生产动态库,其源码如下:
robinDynamic.h文件
#ifndef robin_dynamic_H
#define robin_dynamic_H
#include &stdio.h&
void sayHelloWorld();
robinDynamic.c文件
#include &robinDynamic.h&
void sayHelloWorld()
printf(&this is my first helloworld \n&);
src2目录下也有两个文件robin.h,robin.c,它们用于生成静态库,其源码如下:
robin.h文件
#ifndef _robin_H
#define _robin_H
void sayHello();
robin.c文件
#include &../src/robinDynamic.h&
#include &robin.h&
void sayHello()
sayHelloWorld();
src3目录下只有一个文件
#include &../src2/robin.h&
int main()
sayHello();
echo 编译动态库RobinDynamic
gcc robinDynamic.c&-fPIC&-shared&-o
libRobinDynamic.so
cd ../src2
cp ../src/libRobinDynamic.so .
echo 编译静态库Robin
gcc robin.c&-c&-L.&-lRobinDynamic&-o
echo 把动态库RobinDynamic和静态库Robin打包进.a文件
ar&crv&libRobin.a&robin.o
cd ../src3
cp ../src2/libRobin.a .
cp ../src/libRobinDynamic.so .
echo 编译test程序
gcc test.c&-L.&-lRobin&-lRobinDynamic&-o
rm libRobin.a
rm libRobinDynamic.so
echo 在没动态库RobinDynamic的下情况,运行test程序
./test.exe
cp ../src/libRobinDynamic.so .
echo 拷贝动态库RobinDynamic到当前目录下后,运行test程序
./test.exe
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:2751328次
积分:24387
积分:24387
排名:第145名
原创:226篇
转载:237篇
译文:177篇
评论:278条
(2)(9)(2)(6)(1)(2)(1)(7)(3)(7)(7)(7)(8)(7)(21)(45)(7)(8)(33)(17)(256)(97)(88)(1)

我要回帖

更多关于 html静态调用公用头部 的文章

 

随机推荐