2013-09-22 3 views
1

바이너리 형식의 시스템에 필요한 라이브러리가있는 Go 프로그램을 빌드하려고합니다. 정적 라이브러리는 이동의 이전 버전으로 만들어진 그러나, go build 내가 바로 문제가 무엇인지 볼Go 라이브러리에서 오브젝트 빌드 정보를 얻으려면 어떻게해야합니까?

object is [linux amd64 go1.1.1 X:none] expected [linux amd64 go1.1.2 X:none] 

실패합니다. .a 파일에서 해당 정보를 어떻게 직접 읽을 수 있습니까? (제대로이라고 해당 문자열이 무엇인지, 내가 strings library.a | grep '^go object'로 볼 수 있지만, 출력에 빌드 문자열을을 의미하는 무언가가있다? (그리고?)

답변

1

.a는 이동 컴파일러가 pack 도구를 사용하여 관리됩니다 생성 파일 . 패키지를 연결하는 데 사용되는 메타 데이터 아카이브의 __.PKGDEF 멤버에서 발견된다

당신이 stdout에 아카이브에서이 파일을 추출 할 수는 :.

go tool pack p path/to/package.a __.PKGDEF 

이 빌드 시그나 시작 너는 끝났으니, 에 대한 첫 번째 줄 또는 grep을 가지고 있었고, 출력은 strings이었다. (텍스트가 프로그램 코드에서 상수로 나타나는 경우에는 좀 더 안정적이어야한다.)

관련 문제