Lesson 1 Setting Up An OpenGL Window

原创文章,转载请注明: 转载自慢慢的回味

本文链接地址: Lesson 1 Setting Up An OpenGL Window

In this tutorial, I will teach you how to set up, and use OpenGL in a Windows environment. The program you create in this tutorial will display an empty OpenGL window, switch the computer into fullscreen or windowed mode, and wait for you to press ESC or close the Window to exit. It doesn’t sound like much, but this program will be the framework for every other tutorial I release in the next while. It’s very important to understand how OpenGL works, what goes into creating an OpenGL Window, and how to write simple easy to understand code. You can download the code at the end of the tutorial, but I definitely recommend you read over the tutorial at least once, before you start programming in OpenGL.本作品采用知识共享署名 4.0 国际许可协议进行许可。

C++调用JVM执行

原创文章,转载请注明: 转载自慢慢的回味

本文链接地址: C++调用JVM执行

这是一个从C++调用JVM的使用例子

JavaCPPJNI工程 JavaCPPTest工程

运行时需要加入环境变量LD_LIBRARY_PATH=/root/openjdk/build/linux-amd64/j2sdk-image/jre/lib/amd64/server

//============================================================================
// Name        : JavaCPPJNI.cpp
// Author      : 
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
 
#include <iostream>
#include "jniLegacyLibrary.h"
using namespace std;
 
int main() {
	cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
 
	JavaVM* myvm = JavaCPP_init(0, 0);
	if(myvm == NULL){
		return -1;
	}
	jint version = JNI_OnLoad(myvm, 0);
	JNIEnv* myenv;
	myvm->GetEnv((void**) &myenv, JNI_VERSION_1_6);
	jclass cls = myenv->FindClass("com/telenav/LegacyLibrary$LegacyClass");
	jmethodID cid = myenv->GetMethodID(cls, "<init>", "()V");
	if (cid == NULL) {
		return -1; /* exception thrown */
	}
	/* Construct a java.lang.String object */
	jobject obj = myenv->NewObject(cls, cid);
	if (obj == NULL) {
		return -1; /* exception thrown */
	}
	jmethodID mid =
			myenv->GetMethodID(cls, "sayHello", "(Ljava/lang/String;)V");
	jstring pname = myenv->NewStringUTF("Derek\n");
	myenv->CallVoidMethod(obj, mid, pname);
	Java_com_telenav_LegacyLibrary_00024LegacyClass_sayHello(myenv,obj,pname);
	return 0;
}

本作品采用知识共享署名 4.0 国际许可协议进行许可。

用GDB调试程序

原创文章,转载请注明: 转载自慢慢的回味

本文链接地址: 用GDB调试程序

GDB概述
————

GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图 形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功 能。所谓“寸有所长,尺有所短”就是这个道理。

一般来说,GDB主要帮忙你完成下面四个方面的功能:

    1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
3、当程序被停住时,可以检查此时你的程序中所发生的事。
4、动态的改变你程序的执行环境。

从上面看来,GDB和一般的调试工具没有什么两样,基本上也是完成这些功能,不过在细节上,你会发现GDB这个调试工具的强大,大家可能比较习惯了图形化的调试工具,但有时候,命令行的调试工具却有着图形化工具所不能完成的功能。让我们一一看来。
一个调试示例
——————

源程序:tst.c

     1 #include <stdio.h>
2
3 int func(int n)
4 {
5         int sum=0,i;
6         for(i=0; i<n; i++)
7         {
8                 sum+=i;
9         }
10         return sum;
11 }
12
13
14 main()
15 {
16         int i;
17         long result = 0;
18         for(i=1; i<=100; i++)
19         {
20                 result += i;
21         }
22
23        printf(“result[1-100] = %d /n”, result );
24        printf(“result[1-250] = %d /n”, func(250) );
25 }

编译生成执行文件:(Linux下)
hchen/test> cc -g tst.c -o tst

继续阅读“用GDB调试程序”本作品采用知识共享署名 4.0 国际许可协议进行许可。

使用javacpp调用native library

原创文章,转载请注明: 转载自慢慢的回味

本文链接地址: 使用javacpp调用native library

这是参照http://code.google.com/p/javacpp/#Accessing_Native_APIs 的例子。我把LegacyLibrary.h分成了 LegacyLibrary.h和LegacyLibrary.cpp。

JavaCPPTest click to download project files.

使用过程中易出错的地方:

1 编译的时候需要加入Native Lib的搜索路径:

“-Xcompiler”,”-L/root/workspace/JavaCPPFiles/Debug”

2 LegacyLibrary.java需要加上链接的库名:

@Platform(include = “LegacyLibrary.h”,link=”JavaCPPFiles”)

the lib file is libJavaCPPFiles, but here should be JavaCPPFiles.

3 如果需要用gdb debug:

The debug info should be added for g++ compile: -O0 -g3 (Do not add -s)

-O0: Optimization Level is none
-g3 : Debug Level is Maximum

-s:Omit all symbol information本作品采用知识共享署名 4.0 国际许可协议进行许可。