1、编译命令: g++ -o dome.so -shared -fPIC dome.cpp,如果成功则会在当前目录下生成一个dome.so的文件。
成都创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于成都网站设计、成都网站建设、外贸网站建设、吉隆网络推广、微信小程序、吉隆网络营销、吉隆企业策划、吉隆品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联公司为所有大学生创业者提供吉隆建站搭建服务,24小时服务热线:13518219792,官方网址:www.cdcxhl.com
2、splitpath_s在此作用域中尚未声明这个函数需要的头文件是:stdlib.h,这个函数是 用来获取程序的路径,并对路径进行分解的。
3、在windows上编译时没有任何问题,但是到了centos上就出现了_splitpath_s在此作用域中尚未声明的错误提示,找了很久才发现原来 linux 下是没有_splitpath_s函数的,所以无法识别该函数。
4、‘fopen_s’在此作用域中尚未声明,这里之所以用fopen_s是因为在windows调试的时候提示不安全。
5、‘strlen’在此作用域中尚未声明,前面我声明了一个char[10]常量,然后通过strlen来获取该字符串的长度。
6、在windows中使用strlen只要调用了头文件#include string和空间名using namespace std;即可使用,但是在Linux中需要添加头文件#include string.h才行。
C source file的实现。
#include "obj.h"
int main(const int argc, const char **argv){
void *temp_obj = getObj(100);
printString(temp_obj);//实现C语言调用QT/C++UI界面
return (0);
}
写一个C++ source file和c source file都可以共同包含的头文件,如下所示。
#include stdint.h
#ifdef __cplusplus
class Obj{
public:
Obj(int32_t a=50)
~Obj();
std::string toString();
private:
int32_t k;
};
#endif
#ifdef __cplusplus
extern "C" {
#endif
void* getObj(int32_t a);
void destroyObj(void *obj);
void printString(void *obj);
#ifdef __cplusplus
}
#endif
C++ source file的实现,其中C语言函数是供C source file调用的。
#include iostream
#include sstream
#include iomanip
#include stdint.h
#include "obj.h"
Obj::Obj(int32_t a){
k = a 1;
}
Obj::~Obj(){
/* don't really need to do anything here */
/* k = 0 only for example purposes */
k = 0;
}
std::string Obj::toString(){
std::ostringstream os;
os "Obj is currently: " this-k std::endl;
return os.str();
}
void* getObj(int32_t a){
Obj *out = new Obj(a);
return ((void*)out);
}
void destroyObj(void* obj){
delete (((Foo*)obj));
}
void printString(void *obj){
std::string s = ((Obj*)obj)-toString();
std::cout s;
}
Makefile
make file的实现。
CC ?= gcc
CXX ?= g++
CFLAGS = -O0 -g
CXXFLGS = -00 -g
OBJ = main obj
OBJS = $(addsuffix .o,$(OBJ))
all:
make compile
compile:
make $(OBJS)
make objexe
fooexe: $(OBJS)
$(CXX) -o fooexe $(OBJS)
main.o: main.c
$(CC) -c -o main.o main.c
obj.o: obj.cpp
$(CXX) -c -o obj.o obj.cpp
clean:
rm -rf $(OBJS) objexe *.dSYM
完全和windows 下面没有语法区别
在编译之前我们需要在系统里安装G++ GCC,它们就是Linux下的C++/C的编译器。代码如下
代码:
sudo apt-get install build-essential
sudo apt-get install gcc
sudo apt-get install g++
#include iostream
using namespace std;
int main()
{
cout"Hello,World!\n"endl;
return 0;
}
另一个带c++库函数
#includeiostream
#includestack
using namespace std;
int sushu(int n)
{
int i;
for(i=2;in;i++)
{
if(n%i==0)
break;
}
if(n==i n!=1)
return 1;
else
return 0;
}
int main()
{
int n,i,j;
stackint mystack;
cinn;
while(n1)
{
for (i=2;i=n;i++)
{
if (n%i==0 sushu(i)==1)
{
mystack.push(i);
n=n/i;
break;
}
}
}
while(!mystack.empty())
{
coutmystack.top()" ";
mystack.pop();
}
return 0;
}
名称为 test.cpp
你使用
g++ test.cpp
./a.out
第一、要想跨文件使用同一个变量,该变量必须定义成全局变量
第二、在另外的文件引用文件外的全局变量,引用者必须用extern来声明变量。
第三、必须在函数中去操作该变量
如:
1.cpp:
void func() ;
int n ;
int main()
{
n=1;
func() ;
return 0;
}
2.cpp
#include iostream
extern int n;
void func()
{
std::cout "n="n std::endl ;
}