2016-09-01 3 views
0

나는 Xcode 7로 작성된 C 코드를 가지고 있으며, Mac Capitain (OSX 10.11.6)을 실행중인 Mac 랩톱에서 실행 중입니다.Xcode 7 : PATH 변수를 설정하는 방법?

eflag = execvp("bertini", "input"); 

또는 내 운영 체제를 업그레이드하기 전에이 두 가지 모두가 잘 작동 대안으로

system("bertini input"); 

은 (I 중 하나를 실행중인 :이 프로그램은 다음 코드 줄을 사용하여, "BERTINI"다른 프로그램을 호출 Xcode 3 또는 4는 기억이 안납니다.) 이제는 프로그램이 더 이상 작동하지 않습니다. 프로그램 bertini를 ​​찾을 수 없기 때문입니다.

나는 El CAPitain에서 실행 파일을/usr/bin /에 복사 할 수 없으므로 bertini가 검색 경로에 없다는 것을 알아 냈습니다. 그래서,이 페이지의 지시에 따라 : http://forums.appleinsider.com/discussion/189702/cant-copy-file-to-usr-bin-even-when-logged-in-as-root, 나는 bertini 실행 파일을 내가 선택한 폴더로 옮기고 ~/.bash_profile을이 폴더를 가리 키도록 변경했다. 이제 bertini는 터미널에서 정상적으로 실행되지만 내 프로그램에서 호출되지 않습니다.

Xcode를 실행할 때 bertini의 현재 위치를 찾으려면 어떻게해야합니까? 전체 디렉토리 (/ path/to/directory/containing/bertini/bertini)를 입력하려고 시도했지만 여전히 작동하지 않습니다. 또한 Xcode의 이전 버전 (예 : where is $PATH set in xcode?)에 대한 지침을 따르려고했으나 Xcode의 버전이 매우 다르고 이러한 지시 사항을 적용하는 방법을 이해하지 못하는 것 같습니다. 또한 ~/.MacOSX/environment.plist 설정에 대한 응답의 링크가 끊어져서 "."로 시작하는 파일을 변경하는 것에 대해 불안합니다. 내가하는 일을 모른 채 (나는 이것에 대해 많이 모른다).

일반용이 아닌 학술 연구용이므로 내 컴퓨터에서만 작동하도록 할 수 있습니다 (잘, 두 대의 컴퓨터). 괜찮습니다.

답변

0

나는 execvp를 사용하는 코드 샘플이 올바르게 보이지 않으며 실제로 컴파일해서는 안된다는 말로 시작해야합니다. 당신은 당신의 문제를 해결하기에 지금

char *const argvector[] = { (char *const)"bertini", (char *const)"input", NULL }; 
eflag = execvp("bertini", argvector); 

또는

eflag = execlp("bertini", "bertini", "input", (char *)0); 

OK (확인) 같은 것을 의미합니다. 단순히 일을하기위한 최소한 두 가지 기본 접근법이 있습니다.

char *const argvector[] = { (char *const)"bertini", (char *const)"input", NULL }; 
eflag = execvp("/full/path/to/bertini", argvector); 

실행 함수 (남성 3 간부)에 대한 매뉴얼 페이지 경로를 지정합니다 : 하나는 execvp는 사용하여 다음 예에서와 같이, 당신의 간부 통화에서 "BERTINI"를 넣어 곳의 전체 경로를 지정하는 것입니다 "file"매개 변수로 전달 된 문자열에 "/"문자가없는 경우에만 검색됩니다. 따라서 위 경로는 경로를 무시하고 지정된 전체 경로에 "bertini"를 시작합니다. 이것이 가장 쉬운 방법 일 수도 있으며 이전 버전의 MacOS에서도 잘 동작합니다.

그러나 어떤 이유로 검색 경로가 필요하면 다음 문서에서 설명하는 것처럼 launchctl 셸 명령을 사용하여 Finder에서 실행 된 응용 프로그램의 경로가 특정 검색 경로를 사용하도록 할 수 있습니다 -

Environment variables in Mac OS X

그냥 ~가 .bash_profile에, 당신은 다음 "BERTINI"를위한 당신의 새 위치를 포함하도록 경로를 업데이트 할 때마다 후 (이 물질 œ이다/명령을에서

launchctl setenv PATH $PATH 

를 배치 rtant)이 새로운 정보를 흡수하려면 Finder를 재설정해야합니다. 로그 아웃 한 후 다시 시도 하겠지만, 틀렸다면 다시 부팅 해보십시오. 이제 명령 줄에서 실행 된 모든 응용 프로그램은 업데이트 된 경로를 사용하고 원래 "시스템"호출이 작동합니다.

의견이 분분하다./usr/local/bin은 나중에 MacOS 버전 (/ usr/bin에 변경을 허용하지 않는 버전)에 넣는 좋은 장소입니다. Finder에서 시작한 응용 프로그램에서 사용하는 기본 경로에있을 수도 있습니다. 시도 할 한 가지 더.

관련 문제