在opensuse操作系统下简单编程指南

 一、安装gcc和make

1、正常安装之后opensuse操作系统没有安装gcc和make,需要自己安装。首先从“计算机”开始选择“安装软件”。

2、从软件包管理器选择程序“programming”,从右边栏中找到 gcc和make,点击右下角应用和安装即可。

二、用户环境变量设置

       用root用户登录系统,进行如下相应的操作。Windows环境变量比较简单这里就不再描述了。

A、编辑/etc/profile,增加自定义的环境变量:

FEPHOME=/openSuse3000/fep

LD_LIBRARY_PATH=$ FEPHOME/bin:$ LD_LIBRARY_PATH

export FEPHOME LD_LIBRARY_PATH

B、生效命令Source

#Source /etc/profile

C、查看是否生效

#echo $FEPHOME

D、查看环境变量

#env

 

三、动态链接库范例

       可以使用VC++6.0生成一个动态链接库libdemo,libdemo目录下包含inc、src、unix和win32,其中inc目录存放*.h文件,src目录存放*.c/*.cpp文件,unix目录存放MakeFile,win32存放vc++6.0的*.dsp和*.dsw等。

Linux

/ openSuse3000/fep

|_bin

|_lib

|_code

              |_include

              |_test_sys

                                        libdemo

|_inc

|_src

|_uinx

|_win32

                           testdemo

|_inc

|_src

|_uinx

|_win32

/FEPDebug

|_libdemo

|_testdemo

         libdemo存放stdafx.o和demo.o目标文件;testdemo存放stdafx.o和testdemo.o目标文件。

#stdafx.h
// stdafx.h : include file for standard system include files,
//  or project specific include files that are used frequently, but
//      are changed infrequently
//

#if !defined(AFX_STDAFX_H__E5CE9468_AAF9_46A6_979B_9C125F6E9D00__INCLUDED_)
#define AFX_STDAFX_H__E5CE9468_AAF9_46A6_979B_9C125F6E9D00__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#define WIN32_LEAN_AND_MEAN		// Exclude rarely-used stuff from Windows headers

#include <stdio.h>

// TODO: reference additional headers your program requires here

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_STDAFX_H__E5CE9468_AAF9_46A6_979B_9C125F6E9D00__INCLUDED_)

#stdafx.cpp
// stdafx.cpp : source file that includes just the standard includes
//	libdemo.pch will be the pre-compiled header
//	stdafx.obj will contain the pre-compiled type information

#include "stdafx.h"

// TODO: reference any additional headers you need in STDAFX.H
// and not in this file

#demo.h
#ifndef _DEMO_H_
#define _DEMO_H_

// The following ifdef block is the standard way of creating macros which make exporting 
// from a DLL simpler. All files within this DLL are compiled with the AE_DEMO_EXPORTS
// symbol defined on the command line. this symbol should not be defined on any project
// that uses this DLL. This way any other project whose source files include this file see 
// AE_DEMO_ENTRY functions as being imported from a DLL, wheras this DLL sees symbols
// defined with this macro as being exported.
#ifdef WIN32
#ifdef AE_DEMO_EXPORTS
#define AE_DEMO_ENTRY __declspec(dllexport)
#else
#define AE_DEMO_ENTRY __declspec(dllimport)
#endif
#else
#define AE_DEMO_ENTRY
#endif

// This class is exported from the libdemo.dll
class AE_DEMO_ENTRY CTest 
{
public:
	CTest();
	virtual ~CTest();
public:
	int Add(int a, int b);
protected:
	int	m_nCount;
};

extern AE_DEMO_ENTRY int nTest;

AE_DEMO_ENTRY int fnTest();

#endif // _DEMO_H_

#demo.cpp
#include "stdafx.h"
#include "demo.h"

// This is an example of an exported variable
AE_DEMO_ENTRY int nTest = 0x64;

// This is an example of an exported function.
AE_DEMO_ENTRY int fnTest()
{
	return 64;
}

// This is the constructor of a class that has been exported.
// see demo.h for the class definition
CTest::CTest()
{ 
}

CTest::~CTest()
{ 
}

int CTest::Add(int a, int b)
{
	return (a + b);
}

四、测试动态链接库范例

// testdemo.cpp : Defines the entry point for the console application.
//
// 把demo.h拷贝至$(FEPHOME)/include目录中.

#include "stdafx.h"
#include "demo.h"

int main(int argc, char* argv[])
{
	CTest test;
	int nSum = test.Add(1, 2);
	printf("a=1,b=2,sum=%d\n", nSum);

	printf("nTest=%d\n", nTest);

	printf("int fnTest() return %d\n", fnTest());
	return 0;
}

执行结果:

linux-qf6g:/openSusu3000/fep/bin # ./testdemo

a=1,b=2,sum=3

nTest=100

int fnTest() return 64

五、MakeFile编写

        makefile_linux

#############################################################################
# Title	: makefile_linux(opensuse 11.0)
# Author	: liuxuezong
# Project	: PRJNAME
# Generated by 2011.08.31 14:56
#############################################################################

OBJDIR		= $(PRJOUT)/$(PRJNAME)
DLLDIR		= $(FEPHOME)/bin
BINDIR		= $(FEPHOME)/bin
LIBDIR		= $(FEPHOME)/lib
CODEDIR		= $(FEPHOME)/code
INCPATH		= -I../inc -I$(FEPHOME)/code/include

####### Compiler, tools and options
AR		= ar 
CXX		= g++
CC		= cc 
LD		= g++
MAKE		= make
GM		= gmake
YACC		= yacc
LEX		= lex
TAR           	= tar -cf
COMPRESS     	= gzip -9f
COPY         	= cp -f
SED          	= sed
COPY_FILE    	= $(COPY)
COPY_DIR     	= $(COPY) -R
STRIP        	= 
INSTALL_FILE  	= $(COPY_FILE)
INSTALL_DIR   	= $(COPY_DIR)
INSTALL_PROGRAM = $(COPY_FILE)
DEL_FILE      	= rm -f
SYMLINK       	= ln -f -s
DEL_DIR       	= rmdir
MOVE          	= mv -f
CHK_DIR_EXISTS	= test -d
MKDIR         	= mkdir -p

####### Compiler, flags definitions
ARFLAGS  	= -vr
CFLAGS   	= -g 
CXXFLAGS 	= -c -fpic -w -g
LDCFLAGS 	= -G -z defs -lsocket -lnsl -ldl 
LDCXXFLAGS 	= -shared 
CLDFLAGS 	= -g
CXXLDFLAGS 	= -g -G
BINLIB 		= -lc
THREAD_LIB 	= -lpthread
SOCKET_LIB 	= -lsocket -lnsl
DYLOAD_LIB 	= -ldl

libdemo的Makefile

PRJNAME	= libdemo
PRJOUT	= /FEPDebug

include $(FEPHOME)/code/include/makefile_linux

####### Files
SRCDIR	=../src

SOURCES = stdafx.cpp \
	  demo.cpp

OBJECTS = $(OBJDIR)/stdafx.o \
	  $(OBJDIR)/demo.o 

TARGET	= $(DLLDIR)/$(PRJNAME).so
TARGETA = $(LIBDIR)/$(PRJNAME).a

####### Build rules

all: obj_dir $(TARGET) $(TARGETA)

obj_dir:
	@$(CHK_DIR_EXISTS) $(OBJDIR) || $(MKDIR) $(OBJDIR)

$(TARGET): $(OBJECTS) 
	$(LD) $(LDCXXFLAGS) -o $@ $(OBJECTS) $(CXXLIB)
	
$(TARGETA): $(OBJECTS)  
	$(AR) $(ARFLAGS) $@ $(OBJECTS)

####### Include file dependencies

depend:
	@(mkdepend   -p$(OBJDIR)/ -o.o $(INCPATH) $(SOURCES))>/dev/null 2>&1
	@rm -f makefile.bak

clean:
	rm -f $(OBJECTS)
	rm -f $(TARGET)
	rm -f $(TARGETA)

####### Compile
$(OBJDIR)/stdafx.o: $(SRCDIR)/stdafx.cpp
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $?

$(OBJDIR)/demo.o: $(SRCDIR)/demo.cpp
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $?

# DO NOT DELETE THIS LINE -- make depend depends on it.

 

testdemo的Makefile

PRJNAME	= testdemo
PRJOUT	= /FEPDebug

include $(FEPHOME)/code/include/makefile_linux

####### Files
SRCDIR	=../src

SOURCES = stdafx.cpp \
	  testdemo.cpp

OBJECTS = $(OBJDIR)/stdafx.o \
	  $(OBJDIR)/testdemo.o 

FEPLIB = -L$(DLLDIR) -ldemo 
OUTBIN = ${BINDIR}/testdemo

####### Build rules

all: obj_dir $(OUTBIN)

obj_dir:
	@$(CHK_DIR_EXISTS) $(OBJDIR) || $(MKDIR) $(OBJDIR)
	
$(OUTBIN): $(OBJECTS)  
	$(CXX) -o $@ $(OBJECTS) $(CXXLIB) $(FEPLIB) $(THREAD_LIB) $(DYLOAD_LIB)

####### Include file dependencies

depend:
	@(mkdepend   -p$(OBJDIR)/ -o.o $(INCPATH) $(SOURCES))>/dev/null 2>&1
	@rm -f makefile.bak

clean:
	rm -f $(OBJECTS)
	rm -f $(OUTBIN)

####### Compile
$(OBJDIR)/stdafx.o: $(SRCDIR)/stdafx.cpp
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $?

$(OBJDIR)/testdemo.o: $(SRCDIR)/testdemo.cpp
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $?

# DO NOT DELETE THIS LINE -- make depend depends on it.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值