Bullet 이라는 라이브러리 컴파일에 문제가있음
문제의 파일은 btMultiBodyConstraintSolver.cpp/h 파일들
헤더에 보면
class btMultiBodyConstraintSolver 에서
void resolveSingleConstraintRowGeneric(const btMultiBodySolverConstraint& c); 함수가 정의가 안되어있다고 에러뜸
근데 cpp에 보면
void btMultiBodyConstraintSolver::resolveSingleConstraintRowGeneric(const btMultiBodySolverConstraint& c)
{ ... }
함수가 시그너쳐 토씨하나 안틀리고 정의돼있음
위 클래스의 모든 함수가 같은 현상 나타남
실제로 이거 빌드해서 .lib 파일 만든다음에 다른 프로그램에 링크 해봤는데
저 문제의 클래스에 있는 모든 멤버함수에서 unresolved external symbol 링크에러 뜸
다른 파일의 다른 클래스에서는 해당문제 발생하지 않음
문제 발생할 이유가 전혀 없어보이는데 왜이런거냐?
빨간줄만 보면 낄낄이가 생각나는구만
저 라이브러리와 저걸 사용하는 라이브러리/실행파일 간에 속성 체크해라
x86/x64 Unicode/Multibyte 속성 일치여부 확인해바
멀티스레드 옵션도 확인하고 MT/MD 이런거 이게 가능성 높다
쏘리 같은 라이브러리에 다른파일이 문제가 없으면 위 문제는 아니네
흠;; 리눅스면 일단 nm으로 심볼이 레알 정의되어 있나 확인해보면 될텐데..윈도우니까 걍 라이브러리 프로젝트에 main함수 만들어서 해당 함수 호출되게끔 테스트 코드 짜고 걍 앱으로 속성 바꿔서 실제 제대로 잘 정의되어 있나 보고 (어차피 ide에서 저런 힌팅뜨는거야 프론트엔드 컴파일러 잘못이라;;)
그렇게 해도 빌드할때 심볼 못 찾는거면 cc같은걸로 전처리 과정에서 뭔가 가드가 있거나 하는거 발견할 수 있을텐데 또 윈도우라 어떻게 하는지 모르겠넹;;
근데 해결책은 아닌데 vc++은 하도 문제가 많아서 난 요즘은 vcpkg를 쓰거든? bullet3도 마침 vcpkg에 있넹? 이걸 걍 쓰면 안됨? 로컬 패치를 한거임?
저 문제의 cpp만 빌드 제외한거 아녀? ㅋㅋ
일단 함수/메소드 링크에러는 그것을 사용하려 할때만 오류띄우는데 저런 경우는 모르겠다... 선언정의가 소속 네임스페이스가 다른 경우도 아니고, 저 라이브러리를 사용하는 다른 라이브러리에서 다른 것 사용은 문제가 없는데 저것만 링크에러라는 것은
클래스 메모리 정렬은 왜 한고?
simd같은거 이용할 목적이었으면 사용되는 변수를 정렬시켜주는게 맞는거 같은데
낮잠때리고 왔는데 댓글 많이 달아줬네 친절한 ㅎㅎㅎㅎ
프로젝트 속성들 예제랑 똑같이 바꾸는중에 링크성공했어 Preprocessor definition 에 어떤 정의가 typedef를 바꿔버리는 바람에 다른 함수 시그너쳐 필요로 하던거였음.. 그거 설정하니까 됐다
위에 스샷은 visual studio가 매칭되는 함수를 못잡아내는거같음 빌드는 제대로 된거같고 ㅋㅋ
클래스 메모리 정렬 ATTRIBUTE_ALIGNED16 이건가본데 내가 잘 모르는 항목인데 그냥 라이브러리 소스코드에 있던거임 난 수정 하나도 안했고