动态库项目编译后只产生dll,没有lib,这是怎么回事呢?

THEBEST 2007-12-10 10:00:18
好像在生成dll的时候,lib是中间文件吧?但debug目录里只有dll生成。
...全文
5914 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
awperpvip 2007-12-11
  • 打赏
  • 举报
回复
没有到导出函数?
zhuzhu101011 2007-12-11
  • 打赏
  • 举报
回复
的,但是还有个问题,我编译完成的dll,总是要拷贝到测试程序的当前目录来,有没有好的办法,我新建一个快捷方式也不行,
在linux上面不都可以用ln来一个链接的么?怎么这样还找不到,每次复制很麻烦。
----------------
把文件加到工程里就可以了
zhuzhu101011 2007-12-11
  • 打赏
  • 举报
回复
有输出才会给lib
THEBEST 2007-12-10
  • 打赏
  • 举报
回复
我每次都是全部重新build的,而且肯定是成功了的。dll重新生成过了。

连接 =》 常规 =》输出文件名
只有Debug/scom.dll

而且我发现我的项目里没有.def文件。搜索了,但还是没有。程序的问题?那DLL也产生了亚。
liuxiuk 2007-12-10
  • 打赏
  • 举报
回复
1.程序编译\run通过了没..?
2.通过了, lib应该就生成了, 如果你没指定输出路径, *.lib就在dubug或release目录下
3.查看工程的导出路径设置了没...?

---

在你电脑上先搜索下:*.lib, 就知道生存了没了..!!

搜索不到
那就是程序的问题了
CamelFang 2007-12-10
  • 打赏
  • 举报
回复
确认build成功了吗?
在build菜单中Clean一下再重新build试试?
anzhuge 2007-12-10
  • 打赏
  • 举报
回复
查看你的DLL里面是不是没有标明要输出的函数或者变量(用__declspec(dllexport)表示的)
THEBEST 2007-12-10
  • 打赏
  • 举报
回复
我现在需要创建一个DLL,然后一个程序要用到这个DLL,但编译这个程序的时候需要相应的lib吧?我就是需要这样的一个lib
THEBEST 2007-12-10
  • 打赏
  • 举报
回复
没有在general中只有“产生调试信息”和“增加链接”打了勾。

在下面的工程选项里是这样的:

kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /pdb:"Debug/scom.pdb" /debug /machine:I386 /out:"Debug/scom.dll" /implib:"Debug/scom.lib" /pdbtype:sept

为什么这里显示有scom.lib 却没有产生这个文件呢?
CamelFang 2007-12-10
  • 打赏
  • 举报
回复
Project->Setting->Link->General中,是不是选择了"Doesn't produce .LIB"?
另外,这个lib跟你说的static lib不是一回事.
THEBEST 2007-12-10
  • 打赏
  • 举报
回复
不是纯资源dll,源程序都是自己写的。我用一个笨的方法是再新建一个static lib project,然后项目中把dll项目相关的源代码都import进来。
然后产生一个lib,再拷贝到exe项目中,但这样很麻烦,有没有直接dll项目中产生lib的设置?
我是苦力 2007-12-10
  • 打赏
  • 举报
回复
翻翻是不是你给放debug目录下, 有可能给放别的地方了
如果不是就帮顶
tccqs 2007-12-10
  • 打赏
  • 举报
回复
那你用显示调用绝对路径试一下嘛,,
THEBEST 2007-12-10
  • 打赏
  • 举报
回复
是的,但是还有个问题,我编译完成的dll,总是要拷贝到测试程序的当前目录来,有没有好的办法,我新建一个快捷方式也不行,
在linux上面不都可以用ln来一个链接的么?怎么这样还找不到,每次复制很麻烦。
tccqs 2007-12-10
  • 打赏
  • 举报
回复
你换一台机子就知道有差别了,,不管怎么样,,你的问题也算解决了吧,,
THEBEST 2007-12-10
  • 打赏
  • 举报
回复
是能生成lib,但是生成的lib只有4K,而且我的测试程序也是可以编译的
但是运行的时候说找不到dll,我把dll拷贝到运行程序的当前目录就可以了。
但是如果是通过静态dll工程生成的lib,就有52K,而且我无论在哪执行都可以,不需要在应用程序当前目录下放上dll.
tccqs 2007-12-10
  • 打赏
  • 举报
回复
将scom.h里的注释一下:
//int RegisterUser(IC_Info ICinfo);
//int ChangeUserProp(int instype, const char *content);
int ChangeUserProps(IC_Info ICinfo);
//int DeleteUser();
//int FingerModCmpare();
//int FingerModUpload(IC_Info *pICinfo);
//int FingerModDownload(IC_Info ICinfo);

然后不必给全部的函数加,只给某几个(大于一个)加,比如:
extern "C"__declspec(dllexport)int ChangeUserProp(int instype, const char *content)
{
. . .
}
我这样是可以生成.lib文件的

tccqs 2007-12-10
  • 打赏
  • 举报
回复
在每个函数前加extern "C"__declspec(dllexport)试试,,,
THEBEST 2007-12-10
  • 打赏
  • 举报
回复
我用新建一个静态库工程导入所有的源程序后编译出来的是50K的lib,但是我自己写了一个def文件,把我需要导出的函数(不是源程序中所有的函数)导出来才4K。
而且感觉也是不正确的。
tccqs 2007-12-10
  • 打赏
  • 举报
回复
建议再写一个def文件,,正在帮你解决中,,,
加载更多回复(4)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧