一些问题

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

描述:

 在QT设计师中制作了一个窗口,其中有一个verticalLayout,里面有4个groupBox,每个groupBox中有几个radioButton,如图:。但是实际显示出来的是这样:
groupBox中的控件被隐藏了。

原因:

groupBox里面放了其他控件的话需要给groupBox设置layout(布局)。

解决:

给groupBox设置layout(布局)。

Issue_11 :

时间:

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中。

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修正此问题。

etc…

posted @ 2013-11-08 17:10  *神气*  阅读(1520)  评论(0编辑  收藏  举报