为什么有未定义的引用PPP_GetInterface,PPP_ShutdownModule和PPP_InitializeModule
问题描述:
我想使用便携式本机客户端编译pexe文件。我下面的说明在本页面:为什么有未定义的引用PPP_GetInterface,PPP_ShutdownModule和PPP_InitializeModule
https://developer.chrome.com/native-client/devguide/devcycle/building
我试图建立一个pexe和页所示与静态库链接。我的命令行如下。
/home/adev/opt/nacl_sdk/pepper_37/toolchain/linux_pnacl/bin/pnacl-clang++ -o pim-pnacl.pexe pim-pnacl.o -L/home/adev/opt/nacl_sdk/pepper_37/lib/pnacl/Release -lppapi_cpp -lppapi -L../libpidec -lpidec
我得到以下错误。
/home/adev/opt/nacl_sdk/pepper_37/toolchain/linux_pnacl/sdk/lib/libppapi_stub.a: error: undefined reference to 'PPP_GetInterface'
/home/adev/opt/nacl_sdk/pepper_37/toolchain/linux_pnacl/sdk/lib/libppapi_stub.a: error: undefined reference to 'PPP_ShutdownModule'
/home/adev/opt/nacl_sdk/pepper_37/toolchain/linux_pnacl/sdk/lib/libppapi_stub.a: error: undefined reference to 'PPP_InitializeModule'
答
为了记录,问题在于pim-pnacl.o它需要用-c标志编译。这是编译单个.o文件的正确方法:
/home/adev/opt/nacl_sdk/pepper_37/toolchain/linux_pnacl/bin/pnacl-clang++ -o pim-pnacl.o pim-pnacl.cc -O2 -I/home/adev/opt/nacl_sdk/pepper_37/include -c
我省略了-c,导致链接器问题。