프로그래밍/Opencv

비주얼 스튜디오 c++ 공유 라이브러리[dll,lib] 쓰기 위한 최소 설정

하루에 한번 방문하기 2022. 10. 5. 16:53

설정해야할건 3가지 입니다.
1. VC++ 디렉터리 설정페이지에다가 : 경로설정 2가지
2. 링커->입력->추가 종속성에다가 : 사용할 lib파일을 명시
3. 디버깅->환경에다가 : 2에서 명시한 lib파일과 짝이 되는 dll파일이 있는 경로을 명시.
이때 모든 경로 설정할때는 반드시, c언어에서 한줄당 세미콜론 붙이듯, 디렉토리 경로 하나 당 세미콜론 써주세요.

이 예제에서는 밑의 소스 코드로, opencv 라이브러리 사용을 목표로 합니다.

#include <stdio.h>
#include <opencv2/opencv.hpp>
int main() {
	cv::waitKey(0);
	printf("hell0");
	return 0;
}

결과는 이렇습니다. cv::waitKey는 쌩으로 쓰면 의미없는 함수입니다. 실행하면 밑처럼 hell0을 출력하고 종료됩니다.


1. VC++디렉터리 페이지에서 경로 설정 2개

2가지를 설정해야합니다.
포함 디렉토리 : include폴더 경로를 지정하는 곳입니다.
소스코드(c나 cpp)에서 #include <opencv2/opencv.hpp>를 썼을 때, 빨간줄이 안나오면 경로 지정 성공.

포함 디렉토리(include) 경로를 지정하지 않으면 빨간줄 뜹니다.

라이브러리 디렉토리 : lib폴더 경로를 지정하는 곳입니다. 링커가 정적 라이브러리를 찾을 때 씁니다
(LIB 환경변수에 해당)

라이브러리 디렉토리(lib) 경로를 지정하지 않으면 LNK1181에러가 뜹니다.

여담으로 라이브러리 디렉토리의 LIB 환경변수는 링커가 쓰고, 참조 디렉토리의 LIBPATH는 컴파일러가 씁니다.
출처 : https://stackoverflow.com/questions/20483619/what-is-the-difference-between-the-lib-and-libpath-environment-variables-for-ms


2.

제 경우(opencv), 추가 종속성 설정은 다음과 같습니다.
구성(C)이 debug일 때 : opencv_world455d.lib
구성(C)이 release일 때 : opencv_world455.lib
설정하지 않으면, LNK1120, LNK2001 오류가 뜹니다.


3. 디버깅->환경에다가 : 2에서 명시한 lib파일과 짝이 되는 dll파일이 있는 경로을 명시.

제 경우, dll파일 폴더 경로 설정은 다음과 같습니다.

PATH=$(SolutionDir)01.thirdparty\01.opencv;%PATH%

경로를 지정하지 않으면 이렇게 됩니다.

여담으로, 다음 코드로 ffmpeg를 쓸 때 LNK4819, LNK2001에러가 뜹니다.

#include <stdio.h>
#include <libavformat/avformat.h>
int main() {
	const AVCodec* pCodec = NULL;
	AVFormatContext* pFormatContext = avformat_alloc_context();
	printf("hello world");
	return 0;
}

이건 코드 페이지와 C에 특화된 라이브러리를 C++스타일로 써서 생긴 문제입니다.
제어판 코드 페이지 설정은 https://bangtal.bosornd.com/posts/windows-utf-8/ 에 있습니다..
소스는 밑처럼 수정합니다.

#include <stdio.h>
extern "C" {
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
}
int main() {
	const AVCodec* pCodec = NULL;
	AVFormatContext* pFormatContext = avformat_alloc_context();
	printf("hello world");
	return 0;
}

출처 :
https://stackoverflow.com/questions/14969437/lnk-2019-unresolved-symbol-ffmpeg

LNK 2019 unresolved symbol - FFmpeg

I'm trying to use FFmpeg to open and read a video .avi I work on win7 x64 with Visual Studio 2010 For now my code is very simple: #include "libavcodec/avcodec.h" #include "libavformat/avformat.h" #

stackoverflow.com