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()
2013/11/12
srand(time(NULL)); rand() 不随机,每次都是相同的数
srand需要一个种子,这里用time(NULL)返回值作为种子,time函数精度不高,如果两次调用随机数产生器的时间间隔很小的话,会出现每次都是相同的数的现象。
可以在随机数产生之前Sleep几十毫秒或者中其他值作为种子。
2013/11/20
visual studio 2005环境变量 与 windows环境变量 不一致。
vs2005启动的时候会copy windows的环境变量,修改windows的环境变量不会影响到vs2005的环境变量。
修改windows的环境变量后重新启动vs2005.
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中。
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信息
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”选项,如下图:
2014/04/10
windows下mingw编译的程序无法在控制台中输出信息。
代码:printf("hello world\n");
编译命令:gcc test.c -mwindows
如上代码,编译链接无误,但是没有输出。
编译命令不对
编译选项修改成:gcc test.c -m32
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)
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。
2014/07/29
groupBox里面放了其他控件的话需要给groupBox设置layout(布局)。
给groupBox设置layout(布局)。
2014/08/12
qt编程中测试一个小问题,写了如下代码:
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>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中。
2014/09/12
ndk-build 一直提示stl组件找不到!!
Application.mk没有放在jni目录下!!!!!!!不知道为什么这个mk没放到jni目录下并不提示错误,但是Android.mk不放在jni目录下就会出错。
Application.mk和Android.mk都必须放在jni目录下。
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。
2014/09/25
QT的编辑框在失去焦点后输入的全角符号会消失,QT无法显示Ø等特殊符号。
QT对于全角的支持似乎有一些bug。
QT使用fromLocal8Bit或者toLocal8Bit等函数对于Ø等特殊符号会出错,因为local是中文gbk或者8859-1的编码体系中没有这样的特殊字符。
全角问题无法修正,只能通过forceOutEvent进行手动修正。
特殊符号问题,用的是QString::fromWCharArray(L"Ø")解决的。也许可以setlocal或者其他手段设置QT的local编码格式为为utf-8修正此问题。