又是lib的问题?

duker 2001-08-23 04:49:38
我在bcb中生成了一个h文件function,里面只有一行
int mytest1(int temp);
然后加入一个cpp文件:
int mytest1(int temp){
return 25;
}
之后编译生成一个mylib.lib文件
将mylib.lib文件和function.h文件拷贝到另外一个工程的目录下面
在其中#include "function.h" 再某处调用了 mytest1
在工程中加入了 mylib.lib文件,然后编译
居然告诉我:
[Linker Error] Unresolved external mytest1(int) referenced from D:\PROGRAM FILES\BORLAND\CBUILDER5\PROJECTS\LIBUSETEST\MAIN.OBJ

这是什么原因?
...全文
217 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
yushaofeng 2001-08-27
  • 打赏
  • 举报
回复
study
good luck to you
duker 2001-08-27
  • 打赏
  • 举报
回复
散点分,谢谢大家。windows真不是一个好的开发平台
1、二进制标准不统一使得库的通用性大大降低
2、编译器及开发工具的标准不统一,使得从同样的 source code build也问题
多多
3、各个厂商自己的开发工具不同版本间的兼容性也不是100%
想想吧,我们有多少时间是耗费在这些问题上面!!而不是去编码和解决实际的问题

希望java和linux能尽早普及起来,让我们的注意力能够集中在解决实际问题和
编码上面,而不是去解决什么兼容性问题。
wujinbao 2001-08-24
  • 打赏
  • 举报
回复
将函数的声明(.h文件中)改为extern "C++" __declspec(_EXPORT_TYPE) int mytest1(int );
函数原型改为:__declspec(_EXPORT_TYPE) int mytest1(int temp)......
sunc 2001-08-24
  • 打赏
  • 举报
回复
这是一个传统C问题。请在主菜单中选择Project,然后选择Add to Project,将mylib.lib加入。不需要function.h文件,只要在工程的.h文件,比如unit.h中加入一行:
extern int mytest1(int temp);
然后Build,即可编译通过。
asdmusic8 2001-08-24
  • 打赏
  • 举报
回复
to wujinbao(飞扬草) 
我在编译dll时
这又是什么问题。
[Linker Error] Unresolved external '__linkproc__ intover' referenced from E:\SRC\CONFIGMGR3500MAIN.OBJ
wujinbao 2001-08-24
  • 打赏
  • 举报
回复
补充一点。头文件按dalinsky(大林)的修改!
wujinbao 2001-08-24
  • 打赏
  • 举报
回复
你的函数原型应写成:int WINAPI __declspec(dllexport) mytest1(int temp){return 25;} .h文件应该和你mylib.lib文件同名为mylib.h 改为int WINAPI __declspec(dllexport) mytest1(int );
duker 2001-08-24
  • 打赏
  • 举报
回复
楼上两位说的我都试了,好象不行。
我这可是 bcb自己生成的lib呀,你们碰到过这种问题吗?
谁能给我一个在bcb中生成一个lib然后被其它工程使用的例子。。
dalinsky 2001-08-24
  • 打赏
  • 举报
回复
在头文件中加这两行试试:
#pragma link "mylib"
extern "C" __declspec(dllimport) void __stdcall mytest1();
sunc 2001-08-24
  • 打赏
  • 举报
回复
上面有个小错误,
应该是ShowMessage(mytest1(0));而不是ShowMessage(test11(0));
sunc 2001-08-24
  • 打赏
  • 举报
回复
我的方法做过测试,绝对没问题。
在Add to Project成功后,可以点击Project菜单的View Source,打开Project1.cpp文件,
应看到 USELIB("mylib.lib");一行。
在Unit1.h中#endif上面一行加入extern int mytest1(int temp);
在Unit1.cpp中
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ShowMessage(test11(0));
}
还不行就是mylib.lib有问题了,请选File中的New选Libary模板,
说到这里做了一个测试,知道你错在什么地方了,你大概把代码直接加在mylib.bpf里了。
应该另行做一个空的.cpp文件,如File1.cpp然后加入代码,存盘后Add to Project,
再Build就可以了。

asdmusic8 2001-08-24
  • 打赏
  • 举报
回复
那是说 在做 DLL 是 函数定义 可以放在两个地方。
wujinbao 2001-08-24
  • 打赏
  • 举报
回复
你的dll.cpp中无需 #include"dll.h"。
在别的工程中调用该mytest1函数要包含该dll.h,dll.h只是dll中函数的声明。
你也可以不要该dll.h文件,只要在使用该函数之前加上extern "C" __declspec(dllexport) _stdcall int mytest1(int temp);即可!
asdmusic8 2001-08-24
  • 打赏
  • 举报
回复
dll.cpp

extern "C" __declspec(dllexport) _stdcall int mytest1(int temp);
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
{
return 1;
}
和 把extern "C" __declspec(dllexport) _stdcall int mytest1(int temp);
加到 dll.h 后在 dll.cpp 中 #include"dll.h"有区别吗
wujinbao 2001-08-24
  • 打赏
  • 举报
回复
不会吧? 我没有遇到这种问题呀!
DLL中的函数和平时写的函数差不多,只是要在函数名前加上_export或_import修饰浮。
同时也可以用_declspec(dllexport)修饰。具体的还是找本书看看就知道了。
asdmusic8 2001-08-24
  • 打赏
  • 举报
回复
开始,能够编译成 dll.过了一会而。我改一下。发生错误。然后我把改的删除。还是有哪个错误。现在我就有这个错误。在奋斗。
wujinbao 2001-08-24
  • 打赏
  • 举报
回复
什么叫--有时好,有时不好。,不好以后,就没好过??
asdmusic8 2001-08-24
  • 打赏
  • 举报
回复
能否解释一下。是什么意思。有时好,有时不好。,不好以后,就没好过。
HEROIN 2001-08-23
  • 打赏
  • 举报
回复
up
duker 2001-08-23
  • 打赏
  • 举报
回复
我的就是一个普通的函数,没有类呀!!
加载更多回复(1)

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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