2015-01-09 2 views
-1

Linux 및 Windows에서 codeBlocks를 사용하여 이식 할 수 있어야하는 C 코드를 개발 중입니다. NetCDF C 라이브러리와 HDF5 라이브러리를 포함해야합니다.라이브러리 간의 차이점 및 포함 방법

분명히 리눅스의 라이브러리는 .so와 .a입니다. 창에서 .lib 또는 .dll 여부. 둘 사이의 차이점은 무엇입니까? 나는 리눅스에서 .so를 사용했는데 작동하지만 왜 작동해야하는지 알고 싶다.

두 번째 질문은 내가 파일이 netcdf.h 및 hdf5.h 이 경로는 동일 .../lib 디렉토리/netcdf.h .. 리눅스와 \ lib 디렉토리 \ netcdf.h 내가 알고 있지만하지 포함되어 있다는 것입니다 윈도우와 리눅스 사이를 갈 때마다 링크를 바꿀 수는 있지만, 소스 코드에서 파일 중복없이이를 피할 수있는 방법이 있어야한다고 확신합니다.

누구든지이 문제를 어떻게 처리 할 수 ​​있는지 알려주십시오.

미리 감사드립니다.

+1

이 질문은 두 가지 (주로 관련이없는) 질문입니다. 이것은 좋지 않다. – alk

+0

또한 * libraries *는 "* include *"가 아닌 링크되어 있습니다. d. – alk

+0

문제는 라이브러리 netcdf.a 또는 .so 또는 .bib 또는 .ddl에 링크를 추가하고 동일한 프로젝트에서 .h 파일을 포함하는 링크를 추가해야한다는 것입니다. 그래서 나는 같은 질문으로 모두에게 물었다. 이해해 주셔서 감사합니다 :). –

답변

1

실행 파일 (Windows PE, Linux ELF), 정적 라이브러리, 공유 라이브러리는 동일한 코드를 가질 수 있습니다. 주요 차이점은 컴파일 된 방식과 실행 방식이 메모리에로드되는 것입니다)

"Linux에서는 .a"이고 Windows에서는 ".lib"는 정적 라이브러리라고하는 동일한 작업을 수행합니다. 정적 라이브러리는 정적 라이브러리에서만 함수를 사용할 때 컴파일 타임에만 필요합니다. 함수 코드는 다음과 같습니다. 생성 된 실행 파일에 복사되므로 실행 파일을 실행하는 동안 전체 라이브러리가 필요하므로 공유 라이브러리를 사용하는 것보다 더 큰 실행 파일이됩니다.

Windows의 ".dll"및 Windows의 ".dll"도 동일합니다. 정적 라이브러리와의 차이점은 해당 함수가 실행 파일에 복사되지 않으며 실행 파일에서만 가리켜지고, 런타임에 실행 파일 근처에 실제 라이브러리가 필요합니다.

두 번째 질문은 실제로 문제가 아니며 Windows에서 "/"와 "\"를 모두 사용할 수 있지만 문제가 발생하면 스위치 ifdef를 사용할 수 있습니다

#ifdef _WIN32 
//Windows based code 
#include <windows_headers.h> 
#elif __linux 
//Linux based code 
#include <linux_headers.h> 
#else 
#endif 

PS : 당신은 플랫폼의 차이가 코드에있는 스위치를 ifdef를 사용할 수 있습니다

+0

Marware가 유용한 답변을 해 주셔서 감사합니다. 문안 인사. –

관련 문제