Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Thanks for @n.m. 's help. I got the answer after studying a little from <code>libtool</code>. Let me post the answer here.</p> <p>Finally my working <code>Makefile</code> looks like</p> <pre><code>CC := gcc CXX := g++ LD := 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/lib ReadXML: DOM.o MyDOMErrorHandler.o MyXMLString.o ReadXML.o $(LD) $(LDFLAGS) -o $@ $^ -Wl,-Bstatic -lxerces-c -Wl,-Bdynamic -lnsl -lpthread -lcurl test: ReadXML ldd $(abspath $&lt;) $(abspath $&lt;) /users/jdyu/labs/xerces/xerces-c-3.1.1/samples/data/personal.xml </code></pre> <p>And then the result comes as </p> <pre><code>$ make -B ReadXML 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 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 -L/users/jdyu/labs/xerces/xerces-c-3.1.1/lib -o ReadXML DOM.o MyDOMErrorHandler.o MyXMLString.o ReadXML.o -Wl,-Bstatic -lxerces-c -Wl,-Bdynamic -lnsl -lpthread -lcurl </code></pre> <p>and</p> <pre><code>$ make test ldd /users/jdyu/labs/xerces/ReadXML/ReadXML linux-vdso.so.1 =&gt; (0x00007fff6fdd6000) libnsl.so.1 =&gt; /lib64/libnsl.so.1 (0x0000003b5e200000) libpthread.so.0 =&gt; /lib64/libpthread.so.0 (0x0000003b4ea00000) libcurl.so.4 =&gt; /usr/lib64/libcurl.so.4 (0x0000003b5f200000) libstdc++.so.6 =&gt; /usr/lib64/libstdc++.so.6 (0x0000003b54e00000) libm.so.6 =&gt; /lib64/libm.so.6 (0x0000003b4e200000) libgcc_s.so.1 =&gt; /lib64/libgcc_s.so.1 (0x0000003b54200000) libc.so.6 =&gt; /lib64/libc.so.6 (0x0000003b4de00000) /lib64/ld-linux-x86-64.so.2 (0x0000003b4d600000) libidn.so.11 =&gt; /lib64/libidn.so.11 (0x0000003b5d200000) libldap-2.4.so.2 =&gt; /usr/lib64/libldap-2.4.so.2 (0x0000003b60000000) librt.so.1 =&gt; /lib64/librt.so.1 (0x0000003b4f200000) libgssapi_krb5.so.2 =&gt; /lib64/libgssapi_krb5.so.2 (0x0000003b56a00000) libkrb5.so.3 =&gt; /lib64/libkrb5.so.3 (0x0000003b55e00000) libk5crypto.so.3 =&gt; /lib64/libk5crypto.so.3 (0x0000003b56600000) libcom_err.so.2 =&gt; /lib64/libcom_err.so.2 (0x0000003b55600000) libz.so.1 =&gt; /lib64/libz.so.1 (0x0000003b4ee00000) libssl3.so =&gt; /usr/lib64/libssl3.so (0x0000003b61000000) libsmime3.so =&gt; /usr/lib64/libsmime3.so (0x0000003b60800000) libnss3.so =&gt; /usr/lib64/libnss3.so (0x0000003b5ea00000) libnssutil3.so =&gt; /usr/lib64/libnssutil3.so (0x0000003b60400000) libplds4.so =&gt; /lib64/libplds4.so (0x0000003b5ca00000) libplc4.so =&gt; /lib64/libplc4.so (0x0000003b5c600000) libnspr4.so =&gt; /lib64/libnspr4.so (0x0000003b5e600000) libdl.so.2 =&gt; /lib64/libdl.so.2 (0x0000003b4e600000) libssh2.so.1 =&gt; /usr/lib64/libssh2.so.1 (0x0000003b5de00000) liblber-2.4.so.2 =&gt; /usr/lib64/liblber-2.4.so.2 (0x0000003b5fc00000) libresolv.so.2 =&gt; /lib64/libresolv.so.2 (0x0000003b4fa00000) libsasl2.so.2 =&gt; /usr/lib64/libsasl2.so.2 (0x0000003b5f800000) libssl.so.10 =&gt; /usr/lib64/libssl.so.10 (0x0000003b57a00000) libcrypto.so.10 =&gt; /usr/lib64/libcrypto.so.10 (0x0000003b55200000) libkrb5support.so.0 =&gt; /lib64/libkrb5support.so.0 (0x0000003b55a00000) libkeyutils.so.1 =&gt; /lib64/libkeyutils.so.1 (0x0000003b56200000) libcrypt.so.1 =&gt; /lib64/libcrypt.so.1 (0x0000003b5d600000) libselinux.so.1 =&gt; /lib64/libselinux.so.1 (0x0000003b4f600000) libfreebl3.so =&gt; /lib64/libfreebl3.so (0x0000003b5da00000) /users/jdyu/labs/xerces/ReadXML/ReadXML /users/jdyu/labs/xerces/xerces-c-3.1.1/samples/data/personal.xml Parsing XML file '/users/jdyu/labs/xerces/xerces-c-3.1.1/samples/data/personal.xml' ... Parsing finished in 1 millisecond(s). 37 nodes found. XML platform terminated successfully! </code></pre> <p>The <code>xerces-c</code> linked statically.</p> <hr> <p>And <code>libtool</code> can make it even more static. Append the make file with </p> <pre><code>ReadXML_: DOM.o MyDOMErrorHandler.o MyXMLString.o ReadXML.o libtool --tag=CXX --mode=link $(LD) $(LDFLAGS) -o $@ $^ -lxerces-c -lnsl -lpthread -lcurl test_: ReadXML_ -ldd $(abspath $&lt;) $(abspath $&lt;) /users/jdyu/labs/xerces/xerces-c-3.1.1/samples/data/personal.xml </code></pre> <p>and got the result</p> <pre><code>$ make ReadXML_ libtool --tag=CXX --mode=link g++ -O3 -L/users/jdyu/labs/xerces/xerces-c-3.1.1/lib -o ReadXML_ DOM.o MyDOMErrorHandler.o MyXMLString.o ReadXML.o -lxerces-c -lnsl -lpthread -lcurl libtool: link: g++ -O3 -o .libs/ReadXML_ DOM.o MyDOMErrorHandler.o MyXMLString.o ReadXML.o -L/users/jdyu/labs/xerces/xerces-c-3.1.1/lib /users/jdyu/labs/xerces/xerces-c-3.1.1/lib/libxerces-c.so -lnsl -lpthread -lcurl -Wl,-rpath -Wl,/usr/local/lib </code></pre> <p>and </p> <pre><code>$ make test_ ldd /users/jdyu/labs/xerces/ReadXML/ReadXML_ not a dynamic executable make: [test_] Error 1 (ignored) /users/jdyu/labs/xerces/ReadXML/ReadXML_ /users/jdyu/labs/xerces/xerces-c-3.1.1/samples/data/personal.xml Parsing XML file '/users/jdyu/labs/xerces/xerces-c-3.1.1/samples/data/personal.xml' ... Parsing finished in 1 millisecond(s). 37 nodes found. XML platform terminated successfully! </code></pre> <hr> <p>There is far more in the <code>libtool</code> to learn for me. I tried hard reading <code>libtool</code> code, only to failed to figure out how it coverts the temporary dynamic <code>.libs/ReadXML_</code> to the final <code>ReadXML_</code> which is totally static linked. Anyway, the answer of this question is found.</p> <p>Thanks again, @n.m.</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload