对property_get的未定义引用

时间:2012-07-06 16:20:34

标签: android android-ndk

我的目标是进行微调以找到正确的线程优先级。

我关注的主题位于/ hardware / my_company / codec / openmax_il /

我修改了2个文件

  1. Android.mk

    在LOCAL_C_INCLUDES列表中添加“$(TOP)/ system / core / include”,如下所示

    LOCAL_C_INCLUDES:= \
    
        blur blur blur
        $(TOP)/hardware/my_company/camera/v4l2_camerahal \
        $(TOP)/system/core/include
    
  2. 在我的源文件中。

    #include <cutils/properties.h>
    
    int componentInit(blur blur blur)
    {
       int ret = 0;
    
       blur blur blur
    
       // To find proper thread priority
       char value[92];
       property_get("omx.video_enc.priority", value, "0");
       setVideoEncoderPriority(atoi(value));
    
       return ret;
    }
    
  3. 但是,我遇到了

    的链接错误
     error: undefined reference to 'property_get'
     collect2: ld returned 1 exit status
    

    如果有人帮忙,这对我有好处。 :)

    由于

3 个答案:

答案 0 :(得分:9)

听起来您想使用__system_property_get()中定义的<sys/system_properties.h>。从那个标题:

/* Look up a system property by name, copying its value and a
** \0 terminator to the provided pointer.  The total bytes
** copied will be no greater than PROP_VALUE_MAX.  Returns
** the string length of the value.  A property that is not
** defined is identical to a property with a length 0 value.
*/
int __system_property_get(const char *name, char *value);

此签名并不完全是您要使用的签名,因为在未定义属性的情况下您具有默认值。由于__system_property_get()在未定义属性的情况下返回0,因此您可以自己轻松补充。

以下是我在自己的本机代码中解决问题的方法,对我来说效果很好(虽然它缺少缓冲区溢出检查,这将是一个更好的解决方案):

#include <sys/system_properties.h>
int android_property_get(const char *key, char *value, const char *default_value)
{
    int iReturn = __system_property_get(key, value);
    if (!iReturn) strcpy(value, default_value);
    return iReturn;
}

答案 1 :(得分:8)

您必须添加源文件

#include <cutils/properties.h>

并链接到android.mk中的libcutils:

LOCAL_STATIC_LIBRARIES := libcutils libc

答案 2 :(得分:0)

您需要添加:

 #include <cutil/properties.h>

并在Andorid.mk中链接libcutils

LOCAL_WHOLE_STATIC_LIBRARIES := libcutils`