无法在linux中编译目标c

时间:2015-05-14 14:26:16

标签: linux objective-c gcc

我正在努力进入目标c,但我没有mac所以我试图让它在linux上工作。我发现这两篇文章谈论在linux上编译目标c:this one and this one

好吧,我忘了说我不想使用gnustep,它似乎死了,我不想要所有的cocoa框架,只需要客观的c语法和c标准库。但是如果没有gnustep我就无法编译任何代码!

如果我尝试编译此代码:

public class MainActivity extends Fragment {

    private ExpandListAdapter ExpAdapter;
    private ExpandableListView ExpandList;
    private Button notificar;
    private Context context;
    MainActivity mContext;
    private Button footer;
    private double RaioEscola;
    private CircleOptions mCircle;
    GPSTracker tracker;
    private Location location;
    private Integer IdEscola;

    public MainActivity() {
    }

    public MainActivity(Context context) {
        this.context = context;
    }

    @Override
    public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        final View rootView = inflater.inflate(R.layout.expand, container, false);

        ExpandList = (ExpandableListView) rootView.findViewById(R.id.exp_list);
        notificar = (Button) rootView.findViewById(R.id.btnGetMoreResults);

        new asyncTask(MainActivity.this).execute();

        return rootView;
    }

    private class asyncTask extends AsyncTask<String, Void, Void> {

        private ProgressDialog pd;

        public asyncTask(MainActivity context) {

            mContext = context;
            pd = new ProgressDialog(getActivity());
            pd.setTitle("Por Favor Espere ...");
            pd.setMessage("Enviando ...");
            if (!pd.isShowing()) {
                pd.show();
            }
        }


        @Override
        protected Void doInBackground(final String... params) {

            try {

                String[] resposta = new WebService().get("filhos");

                if (resposta[0].equals("200")) {

                    JSONObject mJSONObject = new JSONObject(resposta[1]);
                    JSONArray dados = mJSONObject.getJSONArray("data");

                    /* cria o array que vai receber os dados da api */
                    final ArrayList<Escolas> mArrayList = new ArrayList<Escolas>();

                    /* percorre o array, adicionando cada linha encontrada em um ArrayList */
                    for (int i = 0; i < dados.length(); i++) {

                        JSONObject item = dados.getJSONObject(i);

                        Escolas mEscolas = new Escolas();

                        mEscolas.setId_escola(item.optInt("id_escola"));
                        mEscolas.setCnpj(item.getString("cnpj"));
                        mEscolas.setRazao_social(item.getString("razao_social"));
                        mEscolas.setNome_fantasia(item.getString("nome_fantasia"));
                        mEscolas.setDistancia(Float.valueOf(item.getString("distancia")));
                        mEscolas.setLogradouro(item.optString("logradouro"));
                        mEscolas.setNumero(item.optString("numero"));
                        mEscolas.setBairro(item.getString("bairro"));
                        mEscolas.setComplemento(item.getString("complemento"));
                        mEscolas.setCep(item.getString("cep"));
                        mEscolas.setCidade(item.getString("cidade"));
                        mEscolas.setEstado(item.getString("estado"));
                        mEscolas.setLatitude(Float.parseFloat(item.getString("latitude")));
                        mEscolas.setLongitude(Float.parseFloat(item.getString("longitude")));

                        RaioEscola = Double.parseDouble(String.valueOf(mEscolas.getDistancia()));
                        IdEscola = mEscolas.getId_escola();


                        JSONObject alunos = item.optJSONObject("alunos");

                        JSONArray data = alunos.getJSONArray("data");

                        if (data != null) {

                            ArrayList<Filhos> arrayalunos = new ArrayList<Filhos>();

                            for (int a = 0; a < data.length(); a++) {

                                Filhos mFilhos = new Filhos();

                                JSONObject clientes = data.getJSONObject(a);

                                mFilhos.setId_aluno(clientes.optInt("id_aluno"));
                                mFilhos.setNome(clientes.optString("nome"));
                                mFilhos.setSobrenome(clientes.optString("sobrenome"));
                                mFilhos.setFoto(clientes.optString("foto"));
                                mFilhos.setModalidade_de_ensino(clientes.optString("modalidade_de_ensino"));
                                mFilhos.setObservacoes(clientes.optString("observacoes"));

                                arrayalunos.add(mFilhos);
                            }

                            mEscolas.setalunos(arrayalunos);
                        }

                         /* popula o array de viagens */
                        mArrayList.add(mEscolas);

                        ExpAdapter = new ExpandListAdapter(getActivity(), mArrayList);

                        getActivity().runOnUiThread(new Runnable() {

                            @Override
                            public void run() {

                                ExpandList.setAdapter(ExpAdapter);
                                ExpAdapter.notifyDataSetChanged();

                                ExpAdapter.setChoiceMode(ExpandListAdapter.CHOICE_MODE_MULTIPLE);

                                ExpandList.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {

                                    @Override
                                    public boolean onChildClick(final ExpandableListView parent, View v, final int groupPosition, final int childPosition, final long id) {

                                        ExpAdapter.setClicked(groupPosition, childPosition);
                                        final int index = parent.getFlatListPosition(ExpandableListView.getPackedPositionForChild(groupPosition, childPosition));
                                        parent.setItemChecked(index, true);
                                        parent.setSelectedChild(groupPosition, childPosition, true);
                                        parent.getChildAt(index);

                                        notificar.setOnClickListener(new View.OnClickListener() {

                                            @Override
                                            public void onClick(View v) {

                                                class update extends TimerTask {

                                                    public void run() {

                                                        try {

                                                            getActivity().runOnUiThread(new Runnable() {

                                                                @Override
                                                                public void run() {

                                                                    final float latitude = mArrayList.get(groupPosition).getLatitude();
                                                                    final float longitude = mArrayList.get(groupPosition).getLongitude();

                                                                    LatLng latLng = new LatLng(latitude, longitude);
                                                                    drawMarkerWithCircle(latLng);

                                                                    GPSTracker gps = new GPSTracker(getActivity());

                                                                    double latitudegps = gps.getLatitude();
                                                                    double longitudegps = gps.getLongitude();

                                                                    float[] distance = new float[2];

                                                                    Location.distanceBetween(mCircle.getCenter().latitude, mCircle.getCenter().longitude, latitudegps, longitudegps, distance);
                                                                    if (distance[0] > mCircle.getRadius()) {
                                                                        Toast.makeText(getActivity(), "Outside", Toast.LENGTH_LONG).show();
                                                                    } 
                                                                    else {
                                                                        Toast.makeText(getActivity(), "Inside", Toast.LENGTH_LONG).show();
                                                                        AlertRest mAlertRest = new AlertRest();
                                                                        try {

                                                                            List<Integer> myIdList = new ArrayList<Integer>();

                                                                            for (int i = 0; i < mArrayList.get(groupPosition).getalunos().size(); i++) {

                                                                                Integer Idalunos = mArrayList.get(groupPosition).getalunos().get(i).getId_aluno();

                                                                                myIdList.add(Idalunos);
                                                                            }

                                                                            mAlertRest.getNotificacao(1, mArrayList.get(groupPosition).getId_escola(), String.valueOf(myIdList), latitudegps, longitudegps);

                                                                        } 
                                                                        catch (Exception e) {
                                                                            e.printStackTrace();
                                                                        }
                                                                    }
                                                                }
                                                            });
                                                        } 
                                                        catch (Exception e) {
                                                            e.printStackTrace();
                                                        }
                                                    }
                                                }

                                                Timer timer = new Timer();
                                                timer.schedule(new update(), 0, 15000);
                                            }

                                            private void drawMarkerWithCircle(LatLng position) {
                                                mCircle = new CircleOptions().center(position).radius(RaioEscola);
                                            }
                                        });

                                        return false;
                                    }
                                });
                            }
                        });
                    }

                    /* retorna um array de objetos */

                } 
                else {
                    throw new Exception("[" + resposta[0] + "] ERRO: " + resposta[1]);
                }

            } 
            catch (Exception e) {
                e.printStackTrace();
            }

            return null;
        }

        @Override
        protected void onPostExecute(Void cursor) {
            if (pd.isShowing()) {
                pd.dismiss();
            }
        }
    }
}

我遇到了分段错误,因为没有init或alloc方法。如果我不从Object继承,就像这样:

public class AlertRest extends WebService {


    private String recurso = "notificacoes";
    private String[] resposta;
    private AlertModelo mAlertModelo;


    public AlertModelo getNotificacao(Integer id_usuario, String token, Integer id_escola, String ids_aluno, Double latitude, Double longitude) throws Exception {


        /* dispara a requisição para a API retornar os dados do "recurso" necessário */
        resposta = new WebService().postToken(recurso, token, "{\"id_usuario\":" + id_usuario + "," + "\"id_escola\":" + id_escola + "," + "\"ids_aluno\":\"" + ids_aluno + "\"," + "\"latitude\":" + latitude + "," + "\"longitude\":" + longitude + "}");

        JSONObject mJSONObject = new JSONObject(resposta[1]);

        if (resposta[1].equals("201")) {

            mAlertModelo = new AlertModelo();
            mAlertModelo.setId_usuario(mJSONObject.getInt(String.valueOf(id_usuario)));
            mAlertModelo.setId_escola(mJSONObject.getInt(String.valueOf(id_escola)));
            mAlertModelo.setIds_aluno(mJSONObject.getInt(String.valueOf(ids_aluno)));
            mAlertModelo.setLatitude(mJSONObject.getDouble(String.valueOf(latitude)));
            mAlertModelo.setLongitude(mJSONObject.getDouble(String.valueOf(longitude)));

        }
        return mAlertModelo;
    }

}

我收到了总线错误。看起来创建接口和实现接口的唯一方法是继承自NSObject。我该如何解决这个问题?

顺便说一下,我正在使用带有-lobjc标志的gcc(带gobjc)

编辑:好的,所以如果我不想使用框架,我必须自己创建一个根对象。我怎样才能做到这一点?我想它在初始化和发布方法中类似于malloc和free,但我不确定。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

这不是Objective C的工作原理。我担心你需要运行时。 Objective C的许多优点都是关于在run-而不是编译时发生的事情。如果你带走了图书馆,那就剩下很多了。