如何提供链接时无法找到的功能?

时间:2012-10-25 00:26:49

标签: c++ c compilation linker static-linking

当我尝试编译我的应用时,我收到两个错误:

  
    

$ g ++ -static -emit-swf -o CloudClient.swf -I ../ boost / boost_libraries / install-dir / include -I ../ ffm         peg-1.0 / bin / include -L ../ boost / boost_libraries / install-dir / lib -L ​​../ffmpeg-1.0 / bin / lib timer.o             audio_encoder.o audio_generator.o video_encoder.o video_generator_rainbow.o sim         ple_synchronizer.o multiplexer.o transmitter.o graph_runner.o cloud_client.o -lswscale -lavformat -lavcodec -lavutil -lboost_system -lboost_date_time -lboost_thread -pthread -lm

  
../ffmpeg-1.0/bin/lib/libswscale.a: error: undefined reference to 'exp'
../ffmpeg-1.0/bin/lib/libavcodec.a: error: undefined reference to 'log'
collect2: ld returned 1 exit status

如果logexp是我的问题,而且如果放在-lm的任何地方,我都不知道如何在字面上创建我自己的存根exp和{{ 1}}并将我的libs与它们链接起来? ....

1 个答案:

答案 0 :(得分:2)

您将在C文件中实现它们(而不是由C编译器编译,而不是由C ++编译器编译),或者在C ++文件中实现它们,然后给出extern“C”链接。例如:

extern "C" double log(double x)
{
    // ...
}

显然,解决链接问题会更好。您不必提供自己的标准C库例程版本。