C ++通过另一链接一个库

问题描述 投票:1回答:1

libA.so链接libB.so

到libB.so主要环节,但它不能访问libA.so.的符号为什么?有没有一种方法,我可以通过libB.so使主可见libA.so的符号

cat a.cc 
#include<iostream>
void hello() {
   return;
}

cat  b.cc
#include <iostream>
void goodbye() {
  return;
}


cat c.cc m
#include<iostream>
void goodbye();
void hello();
void tc() {
  goodbye();
  hello();
}


cat main.cc
#include<iostream>
void hello();
void goodbye();
int main() {
   hello();
}

不知道为什么,这是行不通的,我怎样才能使它发挥作用?

g++ -fPIC -c a.cc b.cc 
g++ a.o b.o -shared -o libA.so


g++ -fPIC -c c.cc
g++ c.o -shared -lA -L. -o libB.so 

g++ main.cc -lA -L.
g++ main.cc -lB -L.
/tmp/cci2foLo.o: undefined reference to symbol '_Z5hellov'
./libA.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

ldd libB.so 
linux-vdso.so.1 =>  (0x00007fffa733d000)
libA.so => ./libA.so (0x00002b0f9a92a000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00002b0f9ab5e000)
libm.so.6 => /lib64/libm.so.6 (0x00002b0f9ae64000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00002b0f9b0e8000)
libc.so.6 => /lib64/libc.so.6 (0x00002b0f9b2ff000)
/lib64/ld-linux-x86-64.so.2 (0x00002b0f9a504000)

如何链接主至A到B?

c++ compiler-errors g++ shared-libraries
1个回答
1
投票

动态库非常类似于正常可执行程序,并且是被分别装载分开且不同的实体。

他们只能出口自己的符号,而不是库的那些它链接到。

这意味着main.cc可以从它明确地链接到库使用的函数,类和符号的总称。如果你想从A您需要的库A链接库中使用的符号。

© www.soinside.com 2019 - 2024. All rights reserved.