C++pythonトレーニングを呼び出すpytorchモデル(一)--makefile作成基礎
単一ソースファイルのコンパイル
複数のソースファイル
参考:複数のファイルディレクトリの下にあるMakefileの書き方
C++サンプルコード
c++ファイルリファレンス
makefileコード
SOファイルと呼び出し
soファイルの生成
soファイルを呼び出す
GDBデバッグ
リファレンス
質問:Segmentation fault(core dumped)
# source object target
SOURCE := demo.cpp
OBJS := demo.o
TARGET := demo
# compile and lib parameter
CC := g++
# so
LIBS := -lLibHandsDetect -lpython3.6m
LDFLAGS := -L. \
-L/home/bob/anaconda2/envs/karas_py36/lib
DEFINES :=
INCLUDE := -I/home/bob/anaconda2/envs/karas_py36/include/python3.6m \
-I.
# so
CFLAGS := -Wl,-rpath=/home/bob/anaconda2/envs/karas_py36/lib -Wl,-rpath=.
CXXFLAGS:=
# link
# -g debug
# $@ $< $^
$(TARGET):$(OBJS)
$(CC) -g -o $@ $^ $(LDFLAGS) $(CFLAGS) $(LIBS)
# compile
$(OBJS):$(SOURCE)
$(CC) $(INCLUDE) -c $^ -o $@
# all:
# $(CC) -o $(TARGET) $(SOURCE)
clean:
rm -fr *.o $(TARGET)
複数のソースファイル
参考:複数のファイルディレクトリの下にあるMakefileの書き方
C++サンプルコード
c++ファイルリファレンス
// ./myhello.c
#include
#include "test.h"
#include "abc.h"
void printhelloworld(void);
int main()
{
abc();
printtest();
printf("
");
printhelloworld();
return 0;
}
void printhelloworld(void){
printf("hello world
");
}
// ./common/abc.h
#include
void abc(void);
// ./common/abc.c
include "abc.h"
include <stdio.h>
void main()
{
printf("helloworld");
}
// ./common/test/test.h
void printtest(void);
// ./common/test/test.c
#include
void printtest(void)
{
printf("
it is in test.c");
}
makefileコード
#compile and lib parameter
CC := gcc
INCLUDE := -I. -Icommon/ -Icommon/test
CFLAGS := -Wall -g
# source
TARGET := myhello
SRC1 := myhello.c
SRC2 := ./common/abc.c
SRC3 := ./common/test/test.c
OBJ1 := ./obj/myhello.o
OBJ2 := ./obj/abc.o
OBJ3 := ./obj/test.o
# SRCS .c .o
#OBJS = $(SRCS:.c=.o)
DIR_SRC1 := .
DIR_SRC2 := ./common
DIR_SRC3 := ./common/test
DIR_OBJ := ./obj
SRCS := $(wildcard ${DIR_SRC1}/*.c ${DIR_SRC2}/*.c ${DIR_SRC3}/*.c)
OBJS := $(patsubst %.c,${DIR_OBJ}/%.o, $(notdir ${SRCS}))
# link
#$(TARGET):$(OBJ1) $(OBJ2) $(OBJ3)
# $(CC) $(OBJ1) $(OBJ2) $(OBJ3) -o $(TARGET)
$(TARGET):$(OBJS)
$(CC) $(OBJS) -o $(TARGET)
# compile
$(OBJ1):$(SRC1)
$(CC) $(INCLUDE) -c $(SRC1) -o $(OBJ1)
$(OBJ2):$(SRC2)
$(CC) $(INCLUDE) -c $(SRC2) -o $(OBJ2)
$(OBJ3):$(SRC3)
$(CC) $(INCLUDE) -c $(SRC3) -o $(OBJ3)
# all:
#
# @echo $(SRCS)
# @echo $(OBJS)
# $(CC) -o $(TARGET) $(SOURCE)
clean:
#find ${DIR_OBJ} -name *.o -exec rm -rf {} \;
rm -fr *.o $(TARGET)
SOファイルと呼び出し
soファイルの生成
# compile and lib parameter
# c++ -std=c++11
#CC := g++
CC := gcc
INCLUDE := -I. -Icommon/ -Icommon/test
CFLAGS := -Wall -g
# source
TARGET := libtest.so
SRC3 := ./common/test/test.c
OBJ3 := ./obj/test.o
all:
$(CC) $(INCLUDE) $(CFLAGS) -fPIC -shared $(SRC3) -o $(TARGET)
clean:
find ${DIR_OBJ} -name *.o -exec rm -rf {} \;
rm -fr *.o $(LIB)
soファイルを呼び出す
# compile and lib parameter
CC := gcc
CFLAGS := -Wall -g
# lib
LDFLAGS := -L.
LIBS := -ltest
INCLUDE := -I. -Icommon/test
# source
TARGET := myhello
SRC1 := myhello.c
OBJ1 := ./obj/myhello.o
# link
$(TARGET):$(OBJ1)
$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
# compile
$(OBJ1):$(SRC1)
$(CC) $(INCLUDE) $(CFLAGS) -c $^ -o $@
clean:
find ${DIR_OBJ} -name *.o -exec rm -rf {} \;
rm -fr *.o $(LIB)
GDBデバッグ
リファレンス
質問:Segmentation fault(core dumped)
# Linux , core , core
ulimit -c
# 。 : core , ulimit , unlimited
ulimit -c 1024
# demo, core , -g
./demo
#
gdb ./demo ./core
# where , q gdb
where