vs2012生成动态库的时候,为什么不能生成lib文件

vs2012生成动态库的时候,为什么不能生成lib文件,第1张

原因可能有三个:

1)在Settings->Link中的General选项页中,选中了“Doesn't produce.LIB”复选框。

2)整个动态链接库中没有导出的函数或类。

3)所有导出函数的实现均写在在头文件中。

自己检测一下。 如果实在找不到原因,可以参考如下两种方法

1、使用LoadLibrary加载DLL文件,通过GetProcAddress()来获取函数来执行。为了方便,还可以把这两个函数写成一个类。。方便写源码。

2、使用vc工具自己 手动生成

1、在命令行执行: dumpbin   /exports   yourdll.dll   >   yourdll.def 

2、编辑   yourdll.def   文件,使之格式与.def文件格式一致。比如: 

EXPORTS               fn1               fn2 

3、在命令行执行: 

lib   /def:yourdll.def   /machine:i386   /out:yourdll.lib

经过努力,发现这个连接的方法,是可以编译生成libcurl.a文件的。我的方法是将解压的curl源码放到ndk根目录。在cygwin中切换到(ndk目录)/curl。然后运行./configure命令生成curl_config.h,然后将android.mk中节点LOCAL_CFLAGS+=\$(common_CFLAGS)\-I$(LOCAL_PATH)/include\-I/usr/include补充缺少内容。然后编译,有好多警告,不过最后还是成功了。

没啥具体要求的话,直接往上堆就行了

cl hello.cpp yourlib.lib

需要更多的控制,查看 cl /? 吧,也可以查 MSDN

===

其他编译器也类似,简单情况可以直接堆文件名

====

library 文件不在默认的搜索路径里的话,一般有两种方法解决:

1 gcc 的话,使用 -L/path/to/lib

2 直接用全路径来写,编译命令上加 /path/to/lib/file

比如

gcc -o hello.exe hello.c C:\xxx\msimg32.lib

另:.h 文件不应该出现在编译命令里,编译单元是按一个源码文件 .c/.cpp 来算的

===========================

隐式链接DLL,链接时使用的是对应的 implib,一般也是以 .lib 文件存在

而 GCC(MinGW) 的话,扩展名为 .a

msimg32 的话,/MinGW/lib 已经有 libmsimg32.a 文件,可以直接加 -lmsimg32 选项来链接

=======

至于资源文件的话,MinGW 中用的编译器是 windres.exe

命令为:windres -i xx.rc -o xx.res -O coff

然后链接成 exe 时加上 xx.res 文件名

=====================

makefile 其实就是便于组织编译命令,实际使用的编译命令还是需要自己写的


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/7962348.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-12
下一篇2023-04-12

发表评论

登录后才能评论

评论列表(0条)

    保存