红联Linux门户
Linux帮助

如何确定程序调用了动态库或者静态库?

发布时间:2010-07-14 00:04:55来源:红联作者:vfdff
[code]//--- Hello, World! for CppUnit

#include

#include
#include
#include
#include
#include
#include

class MyTest : public CppUnit::TestCase
{
CPPUNIT_TEST_SUITE(MyTest);
CPPUNIT_TEST(testHelloWorld);
CPPUNIT_TEST_SUITE_END();

public:
void setUp(void) {}
void tearDown(void) {}

protected:
void testHelloWorld(void) { std::cout << "Hello, world!" << std::endl; }
};

CPPUNIT_TEST_SUITE_REGISTRATION(MyTest);

int main( int ac, char **av )
{
//--- Create the event manager and test controller
CppUnit::TestResult controller;

//--- Add a listener that colllects test result
CppUnit::TestResultCollector result;
controller.addListener( &result );

//--- Add a listener that print dots as test run.
CppUnit::BriefTestProgressListener progress;
controller.addListener( &progress );

//--- Add the top suite to the test runner
CppUnit::TestRunner runner;
runner.addTest( CppUnit::TestFactoryRegistry::getRegistry().makeTest() );
runner.run( controller );

return result.wasSuccessful() ? 0 : 1;
}
[/code]程序使用 g++ -L/usr/local/lib/ mytest.cpp -lcppunit -ldl -o mytest 进行编译,我们能看出来 -lcppunit -ldl 这两个库是动态库还是静态库吗?
如果 /usr/local/lib/ 文件夹下同时有动态库和静态库时怎么办??
文章评论

共有 5 条评论

  1. vfdff 于 2010-08-21 01:34:03发表:

    2# gsm1011


    尝试使用
    $ gcc -c func.c -o func.o
    $ ar rcs libfunc.a func.o生成的静态库libfunc.a
    使用命令
    > ldd -r libfunc.a 提示:
    ldd: warning: you do not have execution permission for `./libfunc.a'
    not a dynamic executable
    说明这个ldd只能分析动态库吧?
    另外,其实也可以使用readelf命令查看库文件类型的

  2. vfdff 于 2010-08-21 01:31:18发表:

    引用:
    用ldd命令查看试试。
    gsm1011 发表于 2010-7-14 01:03

    【2】生成动态库:
    $ gcc -fPIC -c func.c -o func.o
    $ gcc -shared -o libfunc.so.1.0.0 func.o
    $ ln -s libfunc.so.1.0.0 libfunc.so
    $ gcc main.c -o main -L. -lfunc
    $ export LD_LIBRARY_PATH=$(pwd)
    $ ./main
    红色部分是不是可以不要的??

  3. haoxingfeng 于 2010-08-18 11:43:23发表:

    very good ,thanks

  4. vfdff 于 2010-08-11 01:25:48发表:

    ldd命令 用于判断某个可执行的binary 档案含有什么动态函式库

  5. gsm1011 于 2010-07-14 01:03:43发表:

    用ldd命令查看试试。