编译选项shared
编译成动态库用的。
② eclipse c/c++编译时提示 shared library load failed
http://blog.csdn.net/iaiti/article/details/39344895
③ linux 怎么编译.so文件
.so是linux用的 所以 要生成so 需要用gcc 和生成可执行文件类似,只是增加一些编译选项 命令如下 gcc SOURCE_FILES -fPIC -shared -o TARGET SOURCE_FILES可以是.c文件,也可以是经过-c编译出来的.o文件 TARGET为so文件。
④ 如何初始化一个shared
如何初始化一个shared
第一句 #pragma data_seg("Shared") 创建一个称为Shared 的新节。
第二句 int volatile g_lAppInstance =0 将 g_lAppInstance 放入Shared节中。注意此时只有将g_lAppInstance初始化,编译器才会将其放入Shared节中,否则,将放入Shared以外的节。(实际上Visual C++ 编译器提供了一个allocate 说明符,使我们可以将数据放到任何节中。)
第三句指示编译器Shared 节结束。#pragma comment(linker,"/section:Shared,RWS")
这一句,我们使编译链接器知道我们的Shared节具有读,写,共享的属性。这是我们实现互斥运行的关键。这样我们就可以在应用程序之间的多个实例之间共享g_lAppInstance 变量。
在InitInstance() 函数中加入:if(++g_lAppInstance>1) { AfxMessageBox("程序已经运行!"); return FALSE; }
以上代码的作用是在程序是开始对g_lAppInstancd 加1 ,如果发现其值大于1,那么显示Message Box ,并返回FALSE。(注意:在MFC中如果InitInstance返回FALSE,程序将不会被运行!)
⑤ matlab怎么生成动态链接库
1>首先生成目标文件,但是此时要加编译器选项-fpic和链接器选项-shared,
gcc -fpic -c add.c
gcc -fpic -c sub.c
生成中间文件add.o和sub.o
2>其次生成动态库
gcc -shared –o libtiger.so add.o sub.o
生成动态库libtiger.so,libtiger.so就是我们生成的目标动态库。我们以后使用动态库和main.c程序生成可执行程序
说明:
以上两部也可以合成一步搞定:
gcc -fpic -shared add.c sub.c -o libtiger.so
2.使用动态链接库
在编译程序时,使用动态链接库和静态库是一致的,使用”-l库名”的方式,在生成可执行文件的时候会链接库文件。
1>使用命令:
gcc -o main main.c -L ./ -ltiger
2>-L指定动态链接库的路劲,-ldtiger链接库函数tiger。-ltiger是动态库的调用规则。Linux系统下的动态库命名方式是lib*.so,而在链接时表示位-l*,*是自己命名的库名。
3>但是程序会提示如下错误
error while loading shared libraries: libtiger.so: cannot open shared object file: No such file or direct
⑥ 编译时加了-shared参数,编译没有错误,运行是没进入main函数就出现了段错误,什么原因
找个类似于objmp的反编译花激羔刻薏灸割熏公抹工具,然后会生成汇编代码,前面有地址,直接定位地址,然后往上找函数名。
⑦ 为什么使用gcc hello.c -fpie -pie -shared -o hello 编译出来
pie 选项用于编译可执行程序,而非lib
⑧ linux中的--enable-shared 什么意思
这是 configure 常用的一个参数,表示启用动态库版本。
如果你要编译一个库的源代码,可以把它编译成静态库,也可以把它编译成动态库。如果你想编译成静态库,就用 --enable-shared参数;如果你想编译成静态库,就用--enable-static参数。
⑨ 多个.c文件能编译成单个.so文件吗
可以的
一般是把多个.c文件 先分别编译成.o文件
然后再把.o文件打包成.so
也可以直接编译打包,一步完成。
命令如下
gcc SOURCE_FILES -fPIC -shared -o TARGET
SOURCE_FILES可以是.c文件,也可以是经过-c编译出来的.o文件
TARGET为so文件。
比如
gcc a.c b.c c.c d.c -fPIC -shared -o libabcd.so
⑩ 我使用CUDA编程,在内核函数中定义了_shared_float A1[40];结果编译说 identifier "_shared_" is undefine
1. 短横少写了一个。
2. 关于你说的重定义问题。这个我也碰到过。你的工程里面是不是有个main函数所在的cu文件,还有个kernel函数所在的cu文件。你把你的kernel函数所在的cu文件,右键点属性,将
exclude from build选成yes。再编译一下看看。