一些问题
Issue_1 :
时间:
2013/11/08
描述:
系统安装了CUDA v5.5,CMake创建vs2005 project的时候检测到CUDA,去掉勾选,编译opencv 时出现编译错误:
1>f:\cuda\cuda\toolkit\include\host_config.h(92) : fatal error C1189: #error : -- unsupported Microsoft Visual Studio version! Only the versions 2008, 2010, and 2012 are supported!
原因:
CUDA v5.5 不支持VS2005。
解决:
修改opencv root dir/cmakelist.txt,将129行的
OCV_OPTION(WITH_CUDA "Include NVidia Cuda Runtime support" ON IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT ANDROID AND NOT IOS) ) OCV_OPTION(WITH_CUFFT "Include NVidia Cuda Fast Fourier Transform (FFT) library support" ON IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT ANDROID AND NOT IOS) ) OCV_OPTION(WITH_CUBLAS "Include NVidia Cuda Basic Linear Algebra Subprograms (BLAS) library support" OFF IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT ANDROID AND NOT IOS) ) OCV_OPTION(WITH_NVCUVID "Include NVidia Video Decoding library support" OFF IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT ANDROID AND NOT IOS AND NOT APPLE) )
修改成:
if (0) OCV_OPTION(WITH_CUDA "Include NVidia Cuda Runtime support" ON IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT ANDROID AND NOT IOS) ) OCV_OPTION(WITH_CUFFT "Include NVidia Cuda Fast Fourier Transform (FFT) library support" ON IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT ANDROID AND NOT IOS) ) OCV_OPTION(WITH_CUBLAS "Include NVidia Cuda Basic Linear Algebra Subprograms (BLAS) library support" OFF IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT ANDROID AND NOT IOS) ) OCV_OPTION(WITH_NVCUVID "Include NVidia Video Decoding library support" OFF IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT ANDROID AND NOT IOS AND NOT APPLE) ) endif()
Issue_2 :
时间:
2013/11/12
描述:
srand(time(NULL)); rand() 不随机,每次都是相同的数
原因:
srand需要一个种子,这里用time(NULL)返回值作为种子,time函数精度不高,如果两次调用随机数产生器的时间间隔很小的话,会出现每次都是相同的数的现象。
解决:
可以在随机数产生之前Sleep几十毫秒或者中其他值作为种子。
Issue_3 :
时间:
2013/11/20
描述:
visual studio 2005环境变量 与 windows环境变量 不一致。
原因:
vs2005启动的时候会copy windows的环境变量,修改windows的环境变量不会影响到vs2005的环境变量。
解决:
修改windows的环境变量后重新启动vs2005.
Issue_4 :
时间:
2013/12/11
描述:
在h文件中声明了:extern int gs_FeatureCount;
在cpp文件中定义了:int gs_FeatureCount = 0;
rebuild之后仍然提示:error LNK2001: unresolved external symbol "int gs_FeatureCount" (?gs_FeatureCount@@3HA)
原因:
声明和定义不在同一个namespace中,定义包含在namespace MiniOCR中,声明没有包含在内。
解决:
声明包含在namespace MiniOCR中。
Issue_5 :
时间:
2014/02/11
描述:
fwrite/fread 返回0
原因:
1,fread读到了文件末尾;
2,fread(buf,len,1,fp),filesize-curpos < len;
3,fread(buf,1,len,fp),同时读写时,buffer没有被fflush进文件,所以无法读取;
4,fwrite(buf,len,1,fp),buf长度小于len;
5,fwrite(buf,1,len,fp),buf长度小于len,且发生越界。
解决:
计算好buf和file信息
Issue_6 :
时间:
2014/02/20
描述:
vs2005在已有的solution中添加project,无法创建x64环境,显示错误:“This platform could not be created because a solution platform with the same name already exists”
原因:
solution已经存在一个x64的编译选项,不能再创建一个x64环境。
解决:
去掉“Create new solution paltforms”选项,如下图:
Issue_7 :
时间:
2014/04/10
描述:
windows下mingw编译的程序无法在控制台中输出信息。
代码:printf("hello world\n");
编译命令:gcc test.c -mwindows
如上代码,编译链接无误,但是没有输出。
原因:
编译命令不对
解决:
编译选项修改成:gcc test.c -m32
Issue_8 :
时间:
2014/06/06
描述:
在64位系统下使用CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessID)枚举dll时有点问题,枚举进程本身是32位的则只能枚举到32位进程中的dll,枚举进程本身是64位的则只能枚举到64位进程中的dll。
原因:
在64位系统下,32位进程只能枚举到32位进程中的dll(这是限制),64位进程可以用CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessID)枚举出64位进程中的dll,用CreateToolhelp32Snapshot(TH32CS_SNAPMODULE32, dwProcessID)枚举32位进程中的dll。
解决:
在32位系统中只调用CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessID),而在64位系统中则需要调用两次:CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessID),CreateToolhelp32Snapshot(TH32CS_SNAPMODULE32, dwProcessID)
Issue_9 :
时间:
2014/06/27
描述:
创建D3D10/11设备时如果添加了类似D3D10_CREATE_DEVICE_DEBUG的flag,可能会failed。
最新的D3D的很多函数是没有返回值的,以前一直很疑惑没有返回值怎么判断问题出在哪里,似乎也没有找到类似于DXGetLastError这样的函数。用了这个flag才知道,使用visual studio进行debug时,如发生错误会有详细的log输出在output窗口里面。各种详细方便!
原因:
安装最新的Windows SDK或者DX SDK。
解决:
安装最新的Windows SDK或者DX SDK。
Issue_10 :
时间:
2014/07/29
描述:


原因:
groupBox里面放了其他控件的话需要给groupBox设置layout(布局)。
解决:
给groupBox设置layout(布局)。
Issue_11 :
时间:
2014/08/12
描述:
qt编程中测试一个小问题,写了如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | class MyThread : public QThread { Q_OBJECT public : void Run() { } signals: void sendThreadId( int threadId); public slots: void getCommands(QString cmd) { } }; class MyObject : public QObject { Q_OBJECT public : signals: void sendCommands(QString cmd); public slots: void getOtherThreadId( int threadId) { qDebug()<< "other threadId is " <<threadId; } }; int main( int argc, char *argv[]) { QCoreApplication a(argc, argv); MyThread thread ; MyObject object; QObject::connect(& thread ,SIGNAL(sendThreadId( int )),&object,SLOT(getOtherThreadId( int ))); QObject::connect(&object,SIGNAL(sendCommands(QString)),& thread ,SLOT(getCommands(QString))); return a.exec(); } |
结果一堆链接错误:
1 2 3 4 5 6 | 1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __thiscall MyThread::metaObject(void)const " (?metaObject@MyThread@@UBEPBUQMetaObject@@XZ) 1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual void * __thiscall MyThread::qt_metacast(char const *)" (?qt_metacast@MyThread@@UAEPAXPBD@Z) 1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __thiscall MyThread::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@MyThread@@UAEHW4Call@QMetaObject@@HPAPAX@Z) 1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __thiscall MyObject::metaObject(void)const " (?metaObject@MyObject@@UBEPBUQMetaObject@@XZ) 1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual void * __thiscall MyObject::qt_metacast(char const *)" (?qt_metacast@MyObject@@UAEPAXPBD@Z) 1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __thiscall MyObject::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@MyObject@@UAEHW4Call@QMetaObject@@HPAPAX@Z) |
原因:
qt要求这些class必须声明在头文件中,这样qt的代码生成功能才OK。
解决:
建立MyThread.h,MyObject.h,分别把相关代码放到这两个header中。
Issue_12 :
时间:
2014/09/12
描述:
ndk-build 一直提示stl组件找不到!!
原因:
Application.mk没有放在jni目录下!!!!!!!不知道为什么这个mk没放到jni目录下并不提示错误,但是Android.mk不放在jni目录下就会出错。
解决:
Application.mk和Android.mk都必须放在jni目录下。
Issue_13 :
时间:
2014/09/18
描述:
opencv库与QT库中的zlib有冲突,链接错误。
原因:
opencv_core模块有用到zlib,而QT_core中也有用到zlib,并且两个zlib不一致,QT中的zlib少了很多函数。同时链接zlib和qt则链接冲突,去掉zlib则opencv提示少了符号。
解决:
修改OpenCV的core组件中的persistence.cpp,其中有个宏USE_ZLIB,修改为#define USE_ZLIB 0,并且这个文件还要做些小修改,使其不再依赖zlib。
最后链接opencv和qt的库,OK。
Issue_14 :
时间:
2014/09/25
描述:
QT的编辑框在失去焦点后输入的全角符号会消失,QT无法显示Ø等特殊符号。
原因:
QT对于全角的支持似乎有一些bug。
QT使用fromLocal8Bit或者toLocal8Bit等函数对于Ø等特殊符号会出错,因为local是中文gbk或者8859-1的编码体系中没有这样的特殊字符。
解决:
全角问题无法修正,只能通过forceOutEvent进行手动修正。
特殊符号问题,用的是QString::fromWCharArray(L"Ø")解决的。也许可以setlocal或者其他手段设置QT的local编码格式为为utf-8修正此问题。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 单线程的Redis速度为什么快?
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库