
原因可能有三个:
1)在Settings->Link中的General选项页中,选中了“Doesn't produce.LIB”复选框。
2)整个动态链接库中没有导出的函数或类。
3)所有导出函数的实现均写在在头文件中。
自己检测一下。 如果实在找不到原因,可以参考如下两种方法
1、使用LoadLibrary加载DLL文件,通过GetProcAddress()来获取函数来执行。为了方便,还可以把这两个函数写成一个类。。方便写源码。
2、使用vc工具自己 手动生成
1、在命令行执行: dumpbin /exports yourdll.dll > yourdll.def2、编辑 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 其实就是便于组织编译命令,实际使用的编译命令还是需要自己写的
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)