Почему следующая программа не компилируется

Я пытаюсь создать бота, похожего на бота Reddit «!Remindme», и я нашел этот Web Scrapper, написанный на C, но я не понимаю, почему он не компилируется. Кто-нибудь может мне помочь ? Компилятор бросает мне это:

gcc -o crawler src/crawler.o src/html.o src/http.o src/list.o src/queue.o src/url.o -g -Wall -fPIE -lpthread lib/liburiparser.a /usr/bin/ld: src/crawler.o: relocation R_X86_64_32 against `.rodata’ can not be used when making a PIE object; recompile with -fPIE /usr/bin/ld: src/html.o: relocation R_X86_64_32 against `.rodata’ can not be used when making a PIE object; recompile with -fPIE /usr/bin/ld: src/http.o: relocation R_X86_64_32 against `.rodata’ can not be used when making a PIE object; recompile with -fPIE /usr/bin/ld: src/url.o: relocation R_X86_64_32 against `.rodata’ can not be used when making a PIE object; recompile with -fPIE /usr/bin/ld: lib/liburiparser.a(UriNormalizeBase.o): relocation R_X86_64_32S against `.rodata’ can not be used when making a PIE object; recompile with -fPIE /usr/bin/ld: lib/liburiparser.a(UriParse.o): relocation R_X86_64_32S against `.rodata’ can not be used when making a PIE object; recompile with -fPIE /usr/bin/ld: lib/liburiparser.a(UriCommon.o): relocation R_X86_64_32S against `.rodata.str1.1′ can not be used when making a PIE object; recompile with -fPIE /usr/bin/ld: lib/liburiparser.a(UriIp4.o): relocation R_X86_64_32S against `.rodata’ can not be used when making a PIE object; recompile with -fPIE collect2: error: ld returned 1 exit status make: *** [Makefile:20: crawler] Error 1

Даже с флагом -fPIE это не работает, и я не понимаю, почему. Любая помощь ? 🙂

Елена Степанова — Как обновить компилятор и не тронуться

RaiZy_Style 22 Янв 2022 в 11:10
Что он выдает при компиляции с -fPIE ?
22 Янв 2022 в 11:16

2 ответа

Вы не компилируете, вы ссылаетесь. линковщик /usr/bin/ld говорит о том, что некоторые из файлов объектов (как напрямую, так и из архива) должны быть предварительно скомпилированы с -fPIE для работы.

Bo R 22 Янв 2022 в 11:42

Вам нужно будет установить liburiparser ( liburiparser-dev в Ubuntu) и выполнить следующую команду:

Читайте также:
Программа сама пишет сочинение

gcc -o crawler src/crawler.c src/html.c src/http.c src/list.c src/queue.c src/url.c -g -Wall -lpthread -luriparser -I./include

Я предлагаю вам не использовать эти файлы .o, скомпилированные в других системах, скорее всего, с другой архитектурой ЦП.

Источник: question-it.com

Почему следующая программа не компилируется

Почему следующая программа не компилируется:

using System; namespace HelloApp < class Program < static void Main(string[] args) < Person tom = new Employee(); Console.ReadKey(); >> internal class Person < >public class Employee : Person < >>

Производный класс не может иметь больщий уровень доступа или быть более доступным, чем базовый класс. Здесь же базовый класс Person имеет модификатор internal, а производный класс Employee — модификатор public. Таким образом, класс Employee является более доступным чем Person.

Code::Bloks. «*** — Debug» uses an invalid compiler. Ошибка — Не компилируется программа

Даны следующие классы:

class Person < string name; int age; public Person() < >public Person(string name) : this(name, 18) < >public Person(string name, int age) < this.name = name; this.age = age; >> class Employee : Person < string company; public Employee() < >public Employee(string name, int age, string company): base(name, age) < this.company = company; >public Employee(string name, string company) : base(name) < this.company = company; >>

Допустим, мы создаем объект класса Employee следующим образом:

Employee tom = new Employee(«Tom», «Microsoft»);

Какие конструкторы и в каком порядке в данном случае будет выполняться?

Порядок выполнения конструкторов:

  1. System.Object.Object()
  2. Person(string name, int age)
  3. Person(string name)
  4. Employee(string name, string company)

Как запретить наследование от класса?

Указать при определении класса модификатор sealed

Что выведет на консоль следующая программа и почему?

class Auto // легковой автомобиль < public int Seats < get; set; >// количество сидений public Auto(int seats) < Seats = seats; >> class Truck : Auto // грузовой автомобиль < public decimal Capacity < get; set; >// грузоподъемность public Truck(int seats, decimal capacity) < Seats = seats; Capacity = capacity; >> class Program < static void Main(string[] args) < Truck truck = new Truck(2, 1.1m); Console.WriteLine($»Грузовик с грузоподъемностью тонн»); Console.ReadKey(); > >

Читайте также:
Программа диагностики автомобилей Тойота для Андроид

Программа не скомпилируется, потому что в базовом классе не определен конструктор без параметров, поэтому производный обязан вызвать один из конструкторов базового класса.

Что выведет на консоль следующая программа и почему?

class Auto // легковой автомобиль < public int Seats < get; set; >// количество сидений public Auto() < Console.WriteLine(«Auto has been created»); >public Auto(int seats) < Seats = seats; >> class Truck : Auto // грузовой автомобиль < public decimal Capacity < get; set; >// грузоподъемность public Truck(decimal capacity) < Seats = 2; Capacity = capacity; Console.WriteLine(«Truck has been created»); >> class Program < static void Main(string[] args) < Truck truck = new Truck(1.1m); Console.WriteLine($»Truck with capacity «); Console.ReadKey(); > >

Консольный вывод программы:

Auto has been created Truck has been created Truck with capacity 1,1

При создании объекта производного класса вначале вызываются конструкторы базового класса. Поскольку в данном случае консструктор Truck явным образом не вызывает ни одного конструктора, то неявно вызывается конструктор базового класса по умолчанию, который выводит строку «Auto has been created». Затем собственно выполняется конструктор производного класса, который выводит строку «Truck has been created».

Что выведет на консоль следующая программа и почему?

class Person < public string Name < get; set; >= «Ben»; public Person(string name) < Name = «Tim»; >> class Employee : Person < public string Company < get; set; >public Employee(string name, string company) : base(«Bob») < Company = company; >> class Program < static void Main(string[] args) < Employee emp = new Employee(«Tom», «Microsoft») < Name = «Sam» >; Console.WriteLine(emp.Name); // Ben Tim Bob Tom Sam Console.ReadKey(); > >

Программа выведет на консоль имя «Sam». Вне зависимости от того, в каком порядке и какие конструкторы вызываются, инициализатор производного класса будет выполняться в самую последнюю очередь. Поэтому финальное значение свойства Name будет равно «Sam».

Источник: metanit.com

Читайте также:
Как загрузить в ВК программу

Почему не компилируется программа?

Программа считывает с консоли путь к файлу, читает строки из файла и выводит их на экран.
Перепиши код программы с использованием try-with-resources : вынеси в круглые скобки создание объектов с внешними ресурсами. Не забудь удалить ненужный блок finally и вызовы метода close() .

Требования:

Программа должна считать с консоли путь к файлу, далее считать строки из файла и вывести их на экран.

В программе должен использоваться оператор try-with-resources согласно условию.
У оператора try-with-resources не должно быть блока finally.
У объектов с внешними ресурсами не должен вызываться метод close() явно.

Не используй следующие классы File, FileInputStream, FileOutputStream, FileReader, FileWriter пакета java.io.

Solution.java

  • Solution.java

Комментарии (2)

  • популярные
  • новые
  • старые

Для того, чтобы оставить комментарий Вы должны авторизоваться
Louvenia Dione Java Developer в СберТех
7 марта, 07:56

try-with-resources
принимает только объекты классов, имплементирующие интерфейс
Autoclosable

Соответственно, String не является таковым, так что туда его засовывать нельзя. Подумай, как можно сделать так, чтобы не запихивать туда напрямую объект класса String

Уровень 36
20 ноября 2022, 11:22

1. Круглая скобка лишняя перед Scanner, соответственно в конце также лишняя. Если ты решаешь задачки через web idea на сайте, то обращай внимание на ошибки. 2. Ты создаешь переменную String fileName не там и вообще она тогда тут не нужна будет. Вот смотри в 2 сек можно пофиксить твой код.

try (Scanner scanner = new Scanner(System.in); BufferedReader bufferedReader = Files.newBufferedReader(Path.of(scanner.nextLine()))) > Но я не думаю, что валидатор пропустит это решение. Странная конечно конструкция, хотя и рабочая 🙂

  • Курсы программирования
  • Регистрация
  • Курс Java
  • Помощь по задачам
  • Цены
  • Задачи-игры

Сообщество

JavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.

Источник: javarush.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru