기본 콘텐츠로 건너뛰기

글

라벨이 SO인 게시물 표시

공유객체 속도

UNIX 공유객체(shared object) 만들기 테스트 환경을 만들기 전에 파일명을 소개하겠다. Makefile - 빌드를 위한 스크립트 plgn.cpp - plgn.so를 위한 소스. func2 함수가 포함되어 있다. sotest.cpp - 시간 측정을 위한 소스. func1 함수가 포함되어 있다. 일단 Makefile TARGET=sotest plgn.so CXXFLAGS=-g -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_REENTRANT LDFLAGS=-ldl all:$(TARGET) clean:     $(RM) $(TARGET) *.o sotest:sotest.cpp plgn.so:plgn.o     $(CXX) $(CXXFLAGS) -shared -lc -o $@ $< plgn.o:plgn.cpp     $(CXX) $(CXXFLAGS) -c -fPIC $< 뭐, 대충 흉내만 내놓고... 다음은 plgn.cpp extern "C" void func2(volatile int*); void func2(volatile int* v) {     ++(*v); } 역시나 흉내내기. extern "C"를 붙여 맹글링 회피 능력을 +3 했다. (뻘소리) 다음은 sotest.cpp #include <iostream> #include <dlfcn.h> #include <sys/time.h> using namespace std; static const size_t testcount(1000000UL); long long getTimestamp(void) {     static struct timeval tv;     gettimeofday(&tv, NULL);     return 1000...

UNIX 공유객체(shared object) 만들기

#include <cstdio> using namespace std; extern "C" { extern void hello(void); } void hello(void) {     printf("void hello(void);\n"); } g++ -c -fPIC hello.cpp g++ -shared -lc -o hello.so hello.o #include <dlfcn.h> void (*func)(void); int main(int,char**) {     void* handle(dlopen("./hello.so", RTLD_LAZY));     func = (void (*)(void))dlsym(handle,"hello");     func();     return 0; } g++ -o dltest dltest.cpp -ldl 원본 위치: http://purewell.egloos.com/3177776