설정해야할건 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>를 썼을 때, 빨간줄이 안나오면 경로 지정 성공.
라이브러리 디렉토리 : lib폴더 경로를 지정하는 곳입니다. 링커가 정적 라이브러리를 찾을 때 씁니다
(LIB 환경변수에 해당)
여담으로 라이브러리 디렉토리의 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
'프로그래밍 > Opencv' 카테고리의 다른 글
[Opencv] C++ Mnist 데이터셋 읽어오기 (CPU 엔디언, magic number 설명) (0) | 2021.03.21 |
---|