C에서 gibbs 함수를 작성 중이며 rnorm()과 같은 임의의 숫자 함수를 사용하려고합니다.아키텍처에 대한 정의되지 않은 기호 x86_64 : getRNGstate() 및 putRNGstate()
내 코드는 다음과 같다 :
> Undefined symbols for architecture x86_64: "_GetRNGstate",
> referenced from:
> _gibbs in main.o "_PutRNGstate", referenced from:
> _gibbs in main.o "_Rf_rchisq", referenced from:
> _gibbs in main.o "_Rf_rnorm", referenced from:
> _gibbs in main.o "_Rf_runif", referenced from:
> _gibbs in main.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see
> invocation)
내가 엑스 코드를 사용하고 있는데 나는 모두가 알고 :
#include <stdio.h>
#include <string.h>
#include <R.h>
#include <Rmath.h>
void foo(int *nin, double *x)
{
int n = nin[0];
int i;
GetRNGstate();
for (i=0; i<n; i++)
{
x[i] = rchisq(2);
Rprintf("%f\n",x[i]);
}
// exit R random-gen routine
PutRNGstate();
}
그러나 내가 Xcode를 구축하려고 할 때 오류 메시지는 R 및 R64bit. 터미널 $ R은 R64bit를 실행하고 Aquamacs도 R64bit를 실행합니다. 서로 다른 버전에서 충돌인지 여부를 알지 못합니다. 그렇다면 Xcode에서 R을 올바르게 참조하도록 어떻게 설득 할 수 있습니까?
Btw R.h 및 rmath.h 파일이 적어도 3 곳에 있음을 발견했습니다! Xcode에서 어떤 경로를 재배치해야할지 모르겠습니다! 현재 제 3의 헤더 경로와 동일한 헤더 경로가 추가됩니다. 그리고 모든 #include는 잘 동작합니다.
R.Frameworks/Headers
R.Frameworks/Versions/2.15/Resources/include
R.Frameworks/Versions/Current/Resources/include
등
그러나 어느 쪽이든, 어떤 rnorm을받지 않고 C 함수() - 같은 기능이 작동하며 R은 dyn.load를 통해 사용할 수 있습니다().
그래서 제발 도와주세요!
많이 감사!
글쎄, 내가 말, R CMD SHLIB의 main.c를 다음 dyn.load()를 blar blar 사용하여 컴파일 터미널 사용 ... 그것은 작동! 왜 Xcode는 그 getRNGstate()를 알아낼 수 없습니까? – Lisa
R CMD SHLIB를 호출 할 때 완전한 gcc 라인에주의를 기울이십시오. R은 링크 대상을 알고 있기 때문에 작동합니다. Xcode에 대한 전화가 단순히 불완전하다는 것을 두려워합니다. –
Dirk 덕분에 Xcode를 다룰 때 Build 버튼을 클릭하기 만하면 실제로 어떤 컴파일러 Xcode가 호출되는지 알지 못합니다. R CMD SHLIB main.c에서 실제로 R이 컴파일러라고 할 수 있습니까? – Lisa