16584


/usr/lib 等にlibhage.soがあるとして

[code]

    g++ libhoeg.cc -lhage -fPIC -shared -o libhoge.so
    
[/code]

として、とりあえずlibhoge.soは生成されます。

しかしlddでみるかぎりlibhoge.soはlibhage.soをリンクしていませんでした。

どのようにしてリンクすればよろしいでしょうか


CC BY-SA 3.0
2015-09-14T04:29:15.107
16582
2015-11-13T07:34:07.497
2015-09-14T06:07:17.773
49
7844
question
c++ linux
.soファイル生成時に他の.soファイルをリンクする方法


クラスを宣言・定義するだけで使用していないからでしょう。

[code]

    #include <apt-pkg/init.h>
    #include <apt-pkg/cachefile.h>
    #include <apt-pkg/pkgcache.h>
    #include <apt-pkg/cacheiterators.h>
    class Init {
    public:
            static Configuration* getConfigration() { return _config; }
            static pkgSystem* getSysstem() { return _system; }
    };
    
    Configuration *func() { return Init::getConfigration(); }
    
[/code]

こういうソースならリンクされます。

[code]

    $ g++ -o libhoge.so -fPIC -shared libhoge.cc -lapt-pkg
    $ ldd libhoge.so
        linux-vdso.so.1 =>  (0x00007fff9f7a3000)
        libapt-pkg.so.4.12 => /usr/lib/x86_64-linux-gnu/libapt-pkg.so.4.12 (0x00007f393e4cf000)
        libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f393e1c0000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f393ddf6000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f393dbf2000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f393d9d7000)
        libbz2.so.1.0 => /lib/x86_64-linux-gnu/libbz2.so.1.0 (0x00007f393d7c7000)
        liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f393d5a5000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f393d38f000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f393d087000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f393ea37000)
    
[/code]


CC BY-SA 3.0
2015-09-14T04:59:41.827
16584
2015-09-14T04:59:41.827
9873
16582
answer