와의 Xerces-C 정적 라이브러리와 링크 할 수 없습니다 내 Makefile
는 g ++
CC := gcc
CXX := g++
CXXFLAGS := -O3
LDFLAGS := -O3
CXXFLAGS += -I/users/jdyu/labs/xerces/xerces-c-3.1.1-x86_64-linux-gcc-3.4/include
CXXFLAGS += -DXERCES_STATIC_LIBRARY
LDFLAGS += -L/users/jdyu/labs/xerces/xerces-c-3.1.1-x86_64-linux-gcc-3.4/lib
LDFLAGS += -Bstatic
LDFLAGS += -lxerces-c
ReadXML: DOM.o MyDOMErrorHandler.o MyXMLString.o ReadXML.o
clean:
@rm -rvf *.o ReadXML
같은
make
명령은 잘 작동 그래서 내가이 다음
$ ls -1 /users/jdyu/labs/xerces/xerces-c-3.1.1-x86_64-linux-gcc-3.4/lib
libxerces-c-3.1.so
libxerces-c.a
libxerces-c.la
libxerces-c.so
pkgconfig
를 다운로드 및
xerces-c-3.1.1-x86_64-linux-gcc-3.4.tar.gz
압축 해제 .
$ make -B
g++ -O3 -I/users/jdyu/labs/xerces/xerces-c-3.1.1-x86_64-linux-gcc-3.4/include -DXERCES_STATIC_LIBRARY -c -o ReadXML.o ReadXML.cpp
g++ -O3 -I/users/jdyu/labs/xerces/xerces-c-3.1.1-x86_64-linux-gcc-3.4/include -DXERCES_STATIC_LIBRARY -c -o DOM.o DOM.cpp
g++ -O3 -I/users/jdyu/labs/xerces/xerces-c-3.1.1-x86_64-linux-gcc-3.4/include -DXERCES_STATIC_LIBRARY -c -o MyDOMErrorHandler.o MyDOMErrorHandler.cpp
g++ -O3 -I/users/jdyu/labs/xerces/xerces-c-3.1.1-x86_64-linux-gcc-3.4/include -DXERCES_STATIC_LIBRARY -c -o MyXMLString.o MyXMLString.cpp
gcc -O3 -L/users/jdyu/labs/xerces/xerces-c-3.1.1-x86_64-linux-gcc-3.4/lib -Bstatic -lxerces-c ReadXML.o DOM.o MyDOMErrorHandler.o MyXMLString.o -o ReadXML
하지만 그것은 될 수 있도록 노력하겠습니다으로 ReadXML
실행 결과는 "정적"아니다. 인쇄됩니다
./ReadXML: error while loading shared libraries: libxerces-c-3.1.so: cannot open shared object file: No such file or directory
까지 내가 setenv LD_LIBRARY_PATH /users/jdyu/labs/xerces/xerces-c-3.1.1-x86_64-linux-gcc-3.4/lib
입니다. 분명히, xerces-c는 동적으로 링크됩니다.
-Bstatic
이 정적 링크 된 실행 파일을 만드는 데 도움이되지 않는 이유는 무엇입니까?
업데이트는 2013년 5월 13일
n.m @ 따랐다. '이의 조언과
gcc -O3 -L/users/jdyu/labs/xerces/xerces-c-3.1.1-x86_64-linux-gcc-3.4/lib -Wl,-Bstatic -lxerces-c ReadXML.o DOM.o MyDOMErrorHandler.o MyXMLString.o -o ReadXML
/usr/bin/ld: cannot find -lgcc_s
collect2: ld returned 1 exit status
make: *** [ReadXML] Error 1
같은 오류가 발생했습니다 그리고 LDFLAGS += -Wl,-Bstatic -lxerces-c -Wl,-Bdynamic
로, 나는 @ n.m에 대한 감사를
g++ -O3 -L/users/jdyu/labs/xerces/xerces-c-3.1.1-x86_64-linux-gcc-3.4/lib -Wl,-Bstatic -lxerces-c -Wl,-Bdynamic -o ReadXML DOM.o MyDOMErrorHandler.o MyXMLString.o ReadXML.o
DOM.o: In function `parseXMLFile(char const*)':
DOM.cpp:(.text+0x3a6): undefined reference to `xercesc_3_1::DOMImplementationRegistry::getDOMImplementation(unsigned short const*)'
DOM.cpp:(.text+0x3b3): undefined reference to `xercesc_3_1::XMLPlatformUtils::fgMemoryManager'
DOM.cpp:(.text+0x3dc): undefined reference to `xercesc_3_1::XMLUni::fgXercesHandleMultipleImports'
DOM.cpp:(.text+0x3f0): undefined reference to `xercesc_3_1::XMLUni::fgXercesSchema'
DOM.cpp:(.text+0x404): undefined reference to `xercesc_3_1::XMLUni::fgXercesSchemaFullChecking'
DOM.cpp:(.text+0x42f): undefined reference to `xercesc_3_1::XMLUni::fgDOMErrorHandler'
... # Many other lines
ReadXML.cpp:(.text+0x1eb): undefined reference to `xercesc_3_1::XMLString::release(char**, xercesc_3_1::MemoryManager*)'
ReadXML.o:(.gcc_except_table+0x28): undefined reference to `typeinfo for xercesc_3_1::XMLException'
collect2: ld returned 1 exit status
make: *** [ReadXML] Error 1
감사
그냥'-Bstatic' 대신'-Wl, -Bstatic'을 시도하십시오. 또한'-v'를 사용하여 g ++가 링커에 전달하는 정확한 옵션을 살펴보십시오. –
좀 더 정확히 말하면'-Wl, -Bstatic -lxerces-c -Wl, -Bdynamic'이라고 말하면 라이브러리를 정적으로 연결하기를 원할 것입니다. 모든 시스템이 * 모든 * 시스템 라이브러리에 대한 정적 링크를 지원하는 것은 아닙니다. –
@ n.m. 귀하의 답변에 감사드립니다. 월요일에해볼거야. BTW, 왜 이것에 대한 답변을 게시하지? –